UTF-8

2012-07-26 6 views
9

मैं एक PHP वेब अनुप्रयोग का निर्माण कर रहा हूँ, और यह UTF-8 में काम करता है के लिए उपयोगकर्ता इनपुट परिवर्तित करने का सबसे अच्छा तरीका। डेटाबेस यूटीएफ -8 है, पृष्ठों को यूटीएफ -8 के रूप में परोसा जाता है और मैंने यूटीएफ -8 में मेटा टैग का उपयोग करके वर्णसेट सेट किया है। बेशक, इंटरनेट एक्सप्लोरर का उपयोग करने वाले उपयोगकर्ताओं के साथ, और & माइक्रोसॉफ्ट ऑफिस से चिपकाने की प्रतिलिपि बनाते हुए, मैं कभी-कभी यूटीएफ -8 इनपुट को कभी-कभी प्राप्त नहीं करता हूं।UTF-8

आदर्श समाधान एक HTTP 400 Bad Request त्रुटि फेंक होगा, लेकिन स्पष्ट रूप से मैं ऐसा नहीं कर सकते। अगली सबसे अच्छी बात $_GET, $_POST और $_REQUEST को यूटीएफ -8 में परिवर्तित कर रही है। क्या यह देखने के लिए वैसे भी है कि इनपुट में कौन सा चरित्र एन्कोडिंग है, इसलिए मैं इसे iconv पर भेज सकता हूं? यदि नहीं, तो ऐसा करने के लिए सबसे अच्छा समाधान क्या है?

उत्तर

8

बाहर चेक mb_detect_encoding() उदाहरण: utf8_encode()अगर आप गारंटी देते हैं कि स्ट्रिंग ISO-8859-1 के रूप में इनपुट है

$utf8 = iconv(mb_detect_encoding($input), 'UTF-8', $input); 

वहाँ भी है।

+0

स्पष्ट रूप से स्ट्रिंग की गारंटी नहीं दे सकता है आईएसओ -885 9 -1, लेकिन 'mb_detect_encoding()' अच्छा दिखता है –

0

कुछ मामलों में सिर्फ utf8_encode या सामान्य चेकों का उपयोग कर ठीक हैं, लेकिन आप स्ट्रिंग के भीतर कुछ अक्षर खो सकता है। यदि आप विभिन्न प्रकारों के आधार पर मूल सरणी/स्ट्रिंग सूची बना सकते हैं, तो यह उदाहरण विंडोज़ है, आप काफी कुछ बचा सकते हैं।

if(!mb_detect_encoding($fileContents, "UTF-8", true)){ 
    $checkArr = array("windows-1252", "windows-1251"); 
    $encodeString = ''; 
    foreach($checkArr as $encode){ 
     if(mb_check_encoding($fileContents, $encode)){ 
      $encodeString .= $encode.","; 
     } 
    } 
    $encodeString = substr($encodeString, 0, -1); 
    $fileContents = mb_convert_encoding($fileContents, "UTF-8", $encodeString); 
} 
संबंधित मुद्दे