PHP: किसी भी स्ट्रिंग को मूल वर्ण सेट, या कम से कम जानने के बिना UTF-8 में बदलें


146

मेरे पास एक ऐसा एप्लिकेशन है जो दुनिया भर के ग्राहकों के साथ काम करता है, और, स्वाभाविक रूप से, मैं चाहता हूं कि मेरे डेटाबेस में सब कुछ यूटीएफ -8 में विस्फोट हो।

मेरे लिए मुख्य समस्या यह है कि मुझे नहीं पता कि किसी भी स्ट्रिंग के स्रोत को एन्कोडिंग क्या होने जा रहा है - यह एक टेक्स्ट बॉक्स से हो सकता है (इसका उपयोग <form accept-charset="utf-8">केवल तभी उपयोगी होता है जब उपयोगकर्ता वास्तव में फॉर्म सबमिट किया जाता है), या यह हो सकता है अपलोड की गई टेक्स्ट फ़ाइल से, इसलिए मुझे वास्तव में इनपुट पर कोई नियंत्रण नहीं है।

मुझे एक फ़ंक्शन या वर्ग की आवश्यकता है जो सुनिश्चित करता है कि मेरे डेटाबेस में जाने वाला सामान है, जहां तक ​​संभव है, UTF-8 एन्कोडेड। मैंने कोशिश की है, iconv(mb_detect_encoding($text), "UTF-8", $text); लेकिन इसमें समस्या है (यदि इनपुट 'मंगेतर' है तो यह 'मंगेतर' देता है)। मैंने बहुत सी चीजों की कोशिश की है = /

फ़ाइल अपलोड के लिए, मुझे अंतिम उपयोगकर्ता से उनके द्वारा एन्कोडिंग का उपयोग करने के लिए कहने का विचार पसंद है, और उन्हें आउटपुट के समान दिखने वाले पूर्वावलोकन दिखाएगा, लेकिन यह गंदा हैकर्स के खिलाफ मदद नहीं करता है (वास्तव में, यह उनके जीवन को बना सकता है। थोड़ा आसान)।

मैंने इस विषय पर अन्य SO प्रश्नों को पढ़ा है, लेकिन उन्हें लगता है कि "मुझे आरएसएस फ़ीड्स को पार्स करने की आवश्यकता है" या "मैं वेबसाइटों से डेटा परिमार्जन करने की आवश्यकता है" (या, वास्तव में, "आप नहीं कर सकते हैं") जैसे सभी में सूक्ष्म अंतर हैं।

लेकिन ऐसा कुछ होना चाहिए जो कम से कम एक अच्छी कोशिश हो !


5
मूल रूप से यह बिल्कुल सही नहीं है परिभाषा के अनुसार, वास्तव में एक अज्ञात एन्कोडिंग का अनुमान लगाने की सफलता की दर भयानक नहीं है। हेरास्टिक का उपयोग करना संभव है, लेकिन यह 100% से कम सामग्री के आधार पर, समय के 100% से कम सही होगा । आपको इसके बारे में पता होना चाहिए। हो सकता है कि यहां कोई व्यक्ति कम से कम अच्छे आंकड़ों के साथ एक पुस्तकालय का सुझाव दे सकता है।
deceze

निश्चित रूप से, मुझे पता है कि कोई सही समाधान नहीं है - इसलिए किसी ऐसी चीज की इच्छा जो कम से कम एक अच्छा हो।
ग्रिम ...

इससे मदद मिल सकती है: stackoverflow.com/q/505562/642173
Melsi

क्या आपने UTF-8//IGNOREद्वितीय परम के रूप में उपयोग करने की कोशिश की है iconv?
अग्नि

हाँ, यही मैंने किया। बिल्कुल सही नहीं, जाहिर है, तब 'मंगेतर' 'मंगेतर' बन जाता है, लेकिन यह निश्चित रूप से बेहतर है। कैसे काम नहीं करता है?
ग्रिम ...

जवाबों:


255

आप जो माँग रहे हैं वह अत्यंत कठिन है। यदि संभव हो, तो एन्कोडिंग निर्दिष्ट करने के लिए उपयोगकर्ता प्राप्त करना सबसे अच्छा है। किसी हमले को रोकना बहुत आसान या कठिन नहीं होना चाहिए।

हालाँकि, आप ऐसा करने की कोशिश कर सकते हैं:

iconv(mb_detect_encoding($text, mb_detect_order(), true), "UTF-8", $text);

इसे सख्त करने के लिए सेट करने से आपको बेहतर परिणाम मिल सकता है।


5
कृपया, mb_detect_encodingअपने php डिस्ट्रो (कहीं न कहीं: ext / mbstring / libmbfl / mbfl / mbfl_ident.c) में स्रोत कोड पर एक नज़र डालें । यह फ़ंक्शन ठीक से काम नहीं करता है। कुछ एनकोडिंग के लिए भी यह "लौटाया हुआ सच है", योग्य। अन्य Ctrl + c Ctrl + v फ़ंक्शन में हैं। ऐसा इसलिए है क्योंकि आप किसी प्रकार के शब्दकोश या सांख्यिकीय दृष्टिकोण (जैसे मेरा) के बिना एन्कोडिंग का पता नहीं लगा सकते हैं।
Oroboros102

1
जिस तरह से मैं इसे समझता हूं, mb_detect_encodingआपूर्ति की गई एन्कोडिंग की सूची के माध्यम से जाता है, और पहले वाले को स्वीकार करता है जिसके पास स्ट्रिंग में कोई अमान्य बाइट अनुक्रम नहीं है ... एन्कोडिंग के लिए आईएसओ-8859-1 जैसे कोई अमान्य बाइट अनुक्रम नहीं है, यह हमेशा सच है । कोई "स्मार्ट" उत्तराधिकारियों, और परिणाम आपके द्वारा पारित एन्कोडिंग की सूची (और आदेश) के साथ बहुत भिन्न होते हैं।
wutz

यह मेरे लिए काम कर रहा है। मेरे उपयोगकर्ता टिनिफ़ के साथ एक utf8 पृष्ठ पर पाठ प्रस्तुत कर रहे थे, फिर भी कुछ अज्ञात कारण से गैर utf8 वर्ण कभी-कभी डेटाबेस में समाप्त हो गए। इसने इसे ठीक किया, इसलिए बहुत-बहुत धन्यवाद।
जियोर्जियो79

@ जेफ डे - इसके लिए धन्यवाद। मेरी अज्ञानता को क्षमा करें, आपका क्या अर्थ है 'इसे स्ट्रिक्ट करने के लिए सेटिंग'?
एश 501

[जेफ डे] mb_detect_order()भले ही इस परम के लिए डिफ़ॉल्ट मूल्य है, भेज रहा है, क्योंकि वह सही (3 परम) के लिए सख्त एन्कोडिंग का पता लगाना चाहता था :)
jave.web

28

मातृभूमि रूस में हमारे पास 4 लोकप्रिय एनकोडिंग हैं, इसलिए आपका प्रश्न यहां बहुत मांग में है।

केवल प्रतीकों के चार कोड द्वारा आप एन्कोडिंग का पता नहीं लगा सकते हैं, क्योंकि कोड पृष्ठ प्रतिच्छेद करते हैं। अलग-अलग भाषाओं के कुछ कोडप में पूर्ण चौराहे भी हैं। इसलिए, हमें एक और दृष्टिकोण की आवश्यकता है

अज्ञात एन्कोडिंग के साथ काम करने का एकमात्र तरीका संभावनाओं के साथ काम कर रहा है। इसलिए, हम इस प्रश्न का उत्तर नहीं देना चाहते हैं कि "इस पाठ का एन्कोडिंग क्या है?", हम यह समझने की कोशिश कर रहे हैं कि " इस पाठ की सबसे अधिक संभावना एन्कोडिंग क्या है? "।

लोकप्रिय रूसी तकनीकी ब्लॉग में यहाँ एक व्यक्ति ने इस दृष्टिकोण का आविष्कार किया:

आपके द्वारा समर्थित हर एन्कोडिंग में चार कोड की संभावना श्रेणी बनाएँ। आप इसे अपनी भाषा में कुछ बड़े ग्रंथों का उपयोग करके बना सकते हैं (उदाहरण के लिए कुछ कल्पना, रूसी के लिए शेक्सपियर का उपयोग करें और रूसी के लिए टॉल्स्टॉय)। आपको इस तरह से smth मिलेगा:

    encoding_1:
    190 => 0.095249209893009,
    222 => 0.095249209893009,
    ...
    encoding_2:
    239 => 0.095249209893009,
    207 => 0.095249209893009,
    ...
    encoding_N:
    charcode => probabilty

आगे। आप अज्ञात एन्कोडिंग में पाठ लेते हैं और अपने "संभाव्यता शब्दकोश" में प्रत्येक एन्कोडिंग के लिए आप अज्ञात-एन्कोडेड पाठ में हर प्रतीक की आवृत्ति के लिए खोज करते हैं। प्रतीकों की सम संभावनाएँ। बड़ी रेटिंग के साथ एन्कोडिंग विजेता होने की संभावना है। बड़े ग्रंथों के लिए बेहतर परिणाम।

यदि आप रुचि रखते हैं , तो मैं इस कार्य में आपकी सहायता कर सकता हूं। हम दो-चार प्रकार की संभाव्यता सूची का निर्माण करके सटीकता को बहुत बढ़ा सकते हैं।

Btw। mb_detect_encoding प्रमाणित रूप से काम नहीं करता है। हाँ, बिल्कुल। कृपया, "ext / mbstring / libmbfl / mbfl / mbfl_ident.c" में mb_detect_encoding स्रोत कोड पर एक नज़र डालें।


11

आपने शायद यह कोशिश की है, लेकिन सिर्फ mb_convert_encoding फ़ंक्शन का उपयोग क्यों नहीं करते हैं? यह प्रदान किए गए पाठ के चार सेट को ऑटो-डिटेक्ट करने का प्रयास करेगा या आप इसे एक सूची पास कर सकते हैं।

इसके अलावा, मैंने चलाने की कोशिश की:

$text = "fiancée";
echo mb_convert_encoding($text, "UTF-8");
echo "<br/><br/>";
echo iconv(mb_detect_encoding($text), "UTF-8", $text);

और परिणाम दोनों के लिए समान हैं। आप यह कैसे देखते हैं कि आपका पाठ 'मंगेतर' से अलग है? यह DB या ब्राउज़र में है?


डेटाबेस में, ऐसा लगता है - मुझे आपके कोड के साथ बस कोशिश करनी है और मैं सहमत हूं।
ग्रिम ...

1
यह सुनिश्चित करने के लिए जांचें कि आपके द्वारा टेबल / कॉलम पर परिभाषित किए गए कोलेशन UTF-8 भी हैं।
एलेक्सी गेरासिमोव

@AlexeyGerasimov मुझे लगता है कि मुझे वास्तव में जांच करने की आवश्यकता है iconv। मैंने लगभग शुद्ध mb_ * तरीका करने की कोशिश की। आप क्या सोचते हैं?
एंथनी रुतलेज

5

एक स्ट्रिंग के चारसेट की पहचान करने का कोई तरीका नहीं है जो पूरी तरह से सही है। चारसेट का अनुमान लगाने की कोशिश करने के तरीके हैं। इन तरीकों में से एक, और शायद / वर्तमान में PHP में सबसे अच्छा है, mb_detect_encoding () है। यह आपके स्ट्रिंग को स्कैन करेगा और कुछ वर्णों के लिए अद्वितीय सामान की घटनाओं की तलाश करेगा। आपकी स्ट्रिंग के आधार पर, इस तरह की अलग-अलग घटनाएं नहीं हो सकती हैं।

ISO-8859-1 चारसेट बनाम ISO-8859-15 ( http://en.wikipedia.org/wiki/ISO/IEC_8859-15#Changes_from_ISO-8859-1 ) लें

केवल कुछ ही अलग-अलग वर्ण हैं, और इसे बदतर बनाने के लिए, वे एक ही बाइट द्वारा दर्शाए गए हैं। पता लगाने का कोई तरीका नहीं है, यह एन्कोडिंग के बिना एक स्ट्रिंग दिया जा रहा है, चाहे बाइट 0xA4 आपके स्ट्रिंग में ¤ या € को सूचित करने वाला हो, इसलिए यह जानने का कोई तरीका नहीं है कि यह सटीक charset है।

(नोट: आप एक मानव कारक, या इससे भी अधिक उन्नत स्कैनिंग तकनीक जोड़ सकते हैं (जैसे कि Oroboros102 क्या सुझाव देता है), आसपास के संदर्भ के आधार पर यह पता लगाने की कोशिश करें कि क्या चरित्र ¤ या € होना चाहिए, हालांकि यह एक पुल जैसा लगता है बहुत दूर)

उदाहरण के लिए UTF-8 और ISO-8859-1 के बीच अधिक अंतर है, इसलिए यह अभी भी यह पता लगाने की कोशिश कर रहा है कि आप अनिश्चित हैं, हालांकि आप कर सकते हैं और इस पर कभी भी भरोसा नहीं करना चाहिए।

दिलचस्प पढ़ें: http://kore-nordmann.de/blog/php_charset_encoding_FAQ.html#how-do-i-determine-the-charset-encoding-of-a-string

हालांकि सही चारसेट सुनिश्चित करने के अन्य तरीके भी हैं। प्रपत्रों के संबंध में, UTF-8 को अधिक से अधिक लागू करने का प्रयास करें (यह सुनिश्चित करने के लिए स्नोमैन की जांच करें कि आप हर ब्राउज़र में UTF-8 प्रस्तुत करेंगे: http://intertwingly.net/blog/2010/07/29/Rails-and -स्वयं ) ऐसा किया जा रहा है, कम से कम आप सुनिश्चित हो सकते हैं कि आपके प्रपत्रों के माध्यम से प्रस्तुत प्रत्येक पाठ utf_8 है। अपलोड की गई फ़ाइलों के बारे में, उदाहरण के लिए (दस्तावेज़ के BOM का उपयोग करके) का पता लगाने में सहायता के लिए उस पर यूनिक्स 'फ़ाइल -i' कमांड को चलाने के लिए प्रयास करें (यदि आपके सर्वर पर संभव है)। स्क्रैपिंग डेटा के संबंध में, आप HTTP सर्वर को पढ़ सकते हैं। यह आमतौर पर चारसेट निर्दिष्ट करता है। XML फ़ाइलों को पार्स करते समय, देखें कि क्या XML मेटा-डेटा में चारसेट की परिभाषा है।

स्वचालित रूप से चारसेट का अनुमान लगाने की कोशिश करने के बजाय, आपको सबसे पहले अपने आप को एक निश्चित चार्टसेट सुनिश्चित करने का प्रयास करना चाहिए जहां संभव हो, या उस स्रोत से एक परिभाषा को हथियाने की कोशिश करें जो आप (यदि लागू हो) का पता लगाने का सहारा लेने से पहले कर रहे हैं।


एन्क्रिप्टेड डेटा के साथ फार्म और ईमेल पंजीकरण लिंक। यही कारण है कि मैं अपने इनपुट को UTF-8 या कुछ भी नहीं बनाने की कोशिश कर रहा हूं। मेरे उत्तर से आप क्या समझते हैं? सहायक टिप्पणियों की सराहना की जाती है। धन्यवाद।
एंथनी रुतलेज

3

यहाँ आपके प्रश्न का उत्तर देने के लिए कुछ बहुत अच्छे उत्तर और प्रयास हैं। मैं एक एन्कोडिंग मास्टर नहीं हूं, लेकिन मैं आपके डेटाबेस के माध्यम से सभी तरह से एक शुद्ध UTF-8 स्टैक करने की आपकी इच्छा को समझता हूं । मैं utf8mb4टेबल, फ़ील्ड्स और कनेक्शन के लिए MySQL के एन्कोडिंग का उपयोग कर रहा हूं ।

मेरी स्थिति उबली हुई है "मैं बस अपने संस्थापकों, सत्यापनकर्ताओं, व्यावसायिक तर्क और यूटीएफ -8 से निपटने के लिए तैयार किए गए बयान चाहता हूं, जब एचटीएमएल फॉर्म, या ई-मेल पंजीकरण लिंक से डेटा आता है।" इसलिए, अपने सरल तरीके से, मैंने इस विचार के साथ शुरुआत की:

  1. एन्कोडिंग का पता लगाने का प्रयास: $encodings = ['UTF-8', 'ISO-8859-1', 'ASCII'];
  2. यदि एन्कोडिंग का पता नहीं लगाया जा सकता है, throw new RuntimeException
  3. यदि इनपुट है UTF-8, तो जारी रखें।
  4. एल्स, अगर यह है ISO-8859-1याASCII

    ए। UTF-8 में रूपांतरण का प्रयास करें (प्रतीक्षा करें, समाप्त नहीं)

    ख। परिवर्तित मान के एन्कोडिंग का पता लगाएं

    सी। यदि सूचित एन्कोडिंग और परिवर्तित मूल्य दोनों हैं UTF-8, तो जारी रखें।

    घ। अन्य,throw new RuntimeException

मेरे सार वर्ग से Sanitizer

प्रक्षालक

    private function isUTF8($encoding, $value)
    {
        return (($encoding === 'UTF-8') && (utf8_encode(utf8_decode($value)) === $value));
    }

    private function utf8tify(&$value)
    {
        $encodings = ['UTF-8', 'ISO-8859-1', 'ASCII'];

        mb_internal_encoding('UTF-8');
        mb_substitute_character(0xfffd); //REPLACEMENT CHARACTER
        mb_detect_order($encodings);

        $stringEncoding = mb_detect_encoding($value, $encodings, true);

        if (!$stringEncoding) {
            $value = null;
            throw new \RuntimeException("Unable to identify character encoding in sanitizer.");
        }

        if ($this->isUTF8($stringEncoding, $value)) {
            return;
        } else {
            $value = mb_convert_encoding($value, 'UTF-8', $stringEncoding);
            $stringEncoding = mb_detect_encoding($value, $encodings, true);

            if ($this->isUTF8($stringEncoding, $value)) {
                return;
            } else {
                $value = null;
                throw new \RuntimeException("Unable to convert character encoding from ISO-8859-1, or ASCII, to UTF-8 in Sanitizer.");
            }
        }

        return;
    }

कोई यह तर्क दे सकता है कि मुझे अपने अमूर्त वर्ग से एन्कोडिंग चिंताओं को अलग करना चाहिए Sanitizerऔर किसी Encoderवस्तु को ठोस बच्चे के उदाहरण में इंजेक्ट करना चाहिए Sanitizer। हालांकि, मेरे दृष्टिकोण के साथ मुख्य समस्या यह है कि, अधिक ज्ञान के बिना, मैं केवल एन्कोडिंग प्रकारों को अस्वीकार करता हूं जो मुझे नहीं चाहिए (और मैं PHP mb_ * फ़ंक्शन पर भरोसा कर रहा हूं)। आगे के अध्ययन के बिना, मैं नहीं जान सकता कि क्या कुछ आबादी को नुकसान पहुंचाता है या नहीं (या, यदि मैं महत्वपूर्ण जानकारी पर खो रहा हूं)। इसलिए, मुझे और सीखने की जरूरत है। मुझे यह लेख मिला।

पाठ के साथ काम करने के लिए एन्कोडिंग और चरित्र सेट के बारे में प्रत्येक प्रोग्रामर को पूरी तरह से, सकारात्मक रूप से जानने की आवश्यकता है

इसके अलावा, क्या होता है जब एन्क्रिप्टेड डेटा को मेरे ईमेल पंजीकरण लिंक (उपयोग OpenSSLया mcrypt) में जोड़ा जाता है ? क्या यह डिकोडिंग में हस्तक्षेप कर सकता है? विंडोज -1252 के बारे में क्या? सुरक्षा निहितार्थ के बारे में क्या? के उपयोग utf8_decode()और utf8_encode()में Sanitizer::isUTF8संदिग्ध हैं।

लोगों ने PHP mb_ * फ़ंक्शंस में शॉर्ट-कॉमिंग को इंगित किया है। मैंने कभी जांच का समय नहीं लिया iconv, लेकिन अगर यह mb_ * फ़ंक्शन से बेहतर काम करता है, तो मुझे बताएं।


मुझे यह मिल गया, इस मुद्दे पर stackoverflow.com/a/3521396/1429677 उत्कृष्ट उत्तर, यहाँ lib github.com/neitanod/forceutf8
Llewellyn

2

मेरे लिए मुख्य समस्या यह है कि मुझे नहीं पता कि किसी भी स्ट्रिंग के स्रोत को एन्कोडिंग क्या होने जा रहा है - यह एक टेक्स्ट बॉक्स से हो सकता है (इसका उपयोग केवल तभी उपयोगी होता है जब उपयोगकर्ता वास्तव में फॉर्म सबमिट किया जाता है), या यह हो सकता है अपलोड की गई टेक्स्ट फ़ाइल से, इसलिए मुझे वास्तव में इनपुट पर कोई नियंत्रण नहीं है।

मुझे नहीं लगता कि यह कोई समस्या है। एक एप्लिकेशन इनपुट के स्रोत को जानता है। यदि यह एक फ़ॉर्म से है, तो अपने मामले में UTF-8 एन्कोडिंग का उपयोग करें। यह काम करता है। बस दिए गए डेटा की पुष्टि करें कि सही ढंग से एन्कोडेड (सत्यापन) है। ध्यान रखें कि सभी डेटाबेस इसमें पूर्ण सीमा तक UTF-8 का समर्थन नहीं करते हैं।

यदि यह एक फाइल है तो आप इसे UTF-8 डेटाबेस में लेकिन बाइनरी फॉर्म में इनकोड नहीं कर पाएंगे। जब आप फ़ाइल को फिर से आउटपुट करते हैं, तो बाइनरी आउटपुट का भी उपयोग करें, फिर यह पूरी तरह से पारदर्शी है।

आपका विचार अच्छा है कि एक उपयोगकर्ता एन्कोडिंग को बता सकता है, वह / वह फ़ाइल डाउनलोड करने के बाद किसी भी तरह बता सकता है, क्योंकि यह द्विआधारी है।

इसलिए मुझे स्वीकार करना चाहिए कि मैं आपके प्रश्न के साथ एक विशिष्ट मुद्दा नहीं देखता हूं। लेकिन शायद आप कुछ और विवरण जोड़ सकते हैं कि आपकी समस्या क्या है।


क्या आप मेरे उत्तर के साथ देखेंगे और जारी करेंगे? रचनात्मक टिप्पणियों की सराहना की जाती है। धन्यवाद।
एंथनी रुतलेज

1

आप यह अनुमान लगाने की कोशिश करने के लिए मीट्रिक का एक सेट तैयार कर सकते हैं कि कौन सी एन्कोडिंग का उपयोग किया जा रहा है। फिर, सही नहीं है, लेकिन mb_detect_encoding () से कुछ मिस पकड़ सकता है।


हां, अच्छी तरह से mb_detect_encoding()याद आती है, क्या आपको लगता है कि मेरे जवाब से सहारा में गर्मियों में स्नोबॉल का मौका है?
एंथनी रुतलेज

1

यदि आप "इसे कंसोल पर ले जाना चाहते हैं", तो मैं सुझाऊंगा enca। बल्कि साधारण के विपरीत mb_detect_encoding, यह का उपयोग करता है "पार्स, सांख्यिकीय विश्लेषण, अनुमान लगाने और काले जादू का एक मिश्रण उनके एन्कोडिंग निर्धारित करने के लिए" (lol - देख आदमी पेज )। हालांकि, आपको आमतौर पर इनपुट फ़ाइल की भाषा को पास करना होगा यदि आप ऐसे देश-विशिष्ट एन्कोडिंग का पता लगाना चाहते हैं। (हालांकि, mb_detect_encodingअनिवार्य रूप से एक ही आवश्यकता है, क्योंकि एन्कोडिंग को "सही जगह पर" दिखाई देना होगा, इसके लिए पारित एन्कोडिंग की सूची में यह पता लगाने योग्य है।

encaयहाँ भी आया: स्क्रिप्ट के माध्यम से यूनिक्स में किसी फ़ाइल की एन्कोडिंग कैसे खोजें


1

ऐसा लगता है कि आपका प्रश्न काफी उत्तर दिया गया है, लेकिन मेरे पास एक दृष्टिकोण है जो आपको मामले को सरल बना सकता है:

मेरे पास एक समान मुद्दा था mysql से स्ट्रिंग डेटा को वापस करने की कोशिश करना, यहां तक ​​कि डेटाबेस और php दोनों को कॉन्फ़िगर करने के लिए utf-8 को स्वरूपित स्ट्रिंग्स को वापस करने के लिए। जिस तरह से मुझे त्रुटि मिली वह वास्तव में डेटाबेस से उन्हें वापस कर रहा था।

अंत में, वेब के माध्यम से नौकायन मुझे इससे निपटने का एक बहुत आसान तरीका मिला:

यह देते हुए कि आप अपने mysql में उन सभी प्रकार के स्ट्रिंग डेटा को विभिन्न स्वरूपों और कोलाज में सहेज सकते हैं, जो आपको केवल करने की आवश्यकता है, ठीक है अपनी php कनेक्शन फ़ाइल में, इस तरह utf-8 को कोलाज सेट करें:

$connection = new mysqli($server, $user, $pass, $db);
$connection->set_charset("utf8");

विच का अर्थ है कि पहले आप डेटा को किसी भी फॉर्मेट या कोलाज में सेव करते हैं और आप इसे केवल अपनी php फाइल में रिटर्न में बदल देते हैं।

आशा है कि यह मददगार था!



-2
public function convertToUtf8($text) {
    if(!$this->html)
        $this->html = cURL('http://'.$this->url, array('timeout' => 15));

    $html = $this->html;
    preg_match('/<meta.*?charset=(|\")(.*?)("|\")/i', $html, $matches);

    $charset = $matches[2];

    if($charset)
        return mb_convert_encoding($text, 'UTF-8', $charset);
    else
        return $text;
}

डिफ़ॉल्ट विकल्प:

curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);

मैंने कुछ इस तरह की कोशिश की। इसने मेरी मदद की। अगर मेटा चारसेट जानकारी मिली है, मैं परिवर्तित कर रहा हूं, अन्यथा कुछ नहीं कर रहा हूं।


इर्र, क्या आप कृपया अपने फ़ंक्शन की जाँच कर सकते हैं और चर को सही कर सकते हैं?
मार्टिन

$ Url क्या है? $ Html क्या है?
मार्टिन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.