2011-08-15 7 views
10

मैं कुछ गन्दा डेटा पर कुछ डेटा साफ कर रहा हूं जिसे mysql में आयात किया जा रहा है।mysql या php में 'u00e9' को utf8 char में कैसे परिवर्तित करें?

डेटा 'छद्म' यूनिकोड वर्ण, जो वास्तव में के रूप में स्ट्रिंग में एम्बेडेड रहे हैं होता है 'u00e9' आदि

तो एक क्षेत्र हो सकता है .. 'Jalostotitlu00e1n' मुझे लगता है कि अनाड़ी 'u00e1n बाहर चीर करने की जरूरत है 'और इसे संबंधित यूटीएफ चरित्र

के साथ प्रतिस्थापित करें, मैं इसे सबस्ट्रिंग और सीएचआर का उपयोग करके, या तो mysql में कर सकता हूं, लेकिन मैं PHP के माध्यम से डेटा को प्रीप्रोकैस कर रहा हूं, इसलिए मैं इसे वहां भी कर सकता था।

मुझे पहले से ही पता है कि utf डेटा के साथ काम करने के लिए mysql और php को कॉन्फ़िगर कैसे करें। समस्या वास्तव में बस स्रोत डेटा आयात में है।

धन्यवाद

+2

कोई ऐसी है चीज "एक यूटीएफ -8 चरित्र" के रूप में। शायद आप का मतलब है "उस कोडपॉइंट के साथ यूनिकोड चरित्र का यूटीएफ -8 एन्कोडिंग"। –

+0

@ इग्नासिओ वास्तव में, लेकिन मैं एक "यूटीएफ -8 चरित्र" को "एक, दो, तीन या चार बाइट्स का अनुक्रम" के रूप में परिभाषित करता हूं जो यूनिकोड चरित्र को एन्कोड करता है "। क्या यह वैध परिभाषा होगी? – deceze

+1

@deceze: तकनीकी रूप से इसे "यूटीएफ -8 अनुक्रम" कहा जाता है। –

उत्तर

10

एक तरीका है। अपने HTML प्रतिनिधित्व के साथ सभी uXXXX को बदलें और html_entity_decode()

आईई करें। echo html_entity_decode("Jalostotitlán");

फॉर्म में प्रत्येक यूटीएफ चरित्र u1234 को HTML में ሴ के रूप में मुद्रित किया जा सकता है। लेकिन प्रतिस्थापन करना काफी कठिन है, क्योंकि यदि कोई अन्य चार नहीं है जो यूटीएफ अनुक्रम की शुरुआत की पहचान करता है तो बहुत झूठे सकारात्मक हो सकते हैं। एक साधारण regex हो सकता है

preg_replace('/u([\da-fA-F]{4})/', '&#x\1;', $str)

+0

धन्यवाद, अच्छा सरल समाधान जिसे मैंने नहीं सोचा था। मुझे लगता है कि इसका उपयोग करना सुरक्षित होगा, क्योंकि जिस डेटा को मैं ठीक करने का प्रयास कर रहा हूं, उसमें कोई संख्या नहीं होनी चाहिए। वे एकमात्र कारण है जो गड़बड़ यूटीएफ की वजह से है, इसलिए – carpii

+1

की पहचान करना आसान होना चाहिए सावधान रहें! जब तक आपका डेटा वास्तव में प्रतिबंधित नहीं होता है तब तक आप डेटा मैंगलिंग से विश्वसनीय रूप से पुनर्प्राप्त नहीं कर सकते हैं। किसी भी यू-हेक्स-हेक्स-हेक्स अनुक्रम को एक उलझन वाले यूनिकोड से बचने के रूप में लेना, उदाहरण के लिए, "persuaded" शब्द को "pers 귭" में बदल दें ... – bobince

+0

@bobince सही, इसलिए मैंने लिखा है कि यह काफी आसान नहीं है "झूठी सकारात्मक"। पहचानकर्ता होना बहुत महत्वपूर्ण है। – rabudde

2

मेरे चहचहाना समय स्क्रिप्ट \ में é जैसे विशेष वर्ण रिटर्न u00e9 तो मैं बैकस्लैश छीन और उसके preg_replace @rubbude इस्तेमाल किया।

// Fix uxxxx charcoding to html 
$str  = str_replace('\u','u',$json); 
$strJSON = preg_replace('/u([\da-fA-F]{4})/', '&#x\1;', $str); 

यह मेरे लिए workes और यह बदल जाता है: De #Haarstichting is h\u00e9t medium voor alles में: De #Haarstichting is hét medium voor alles

+2

नहीं! '\ u' से बैकस्लैश को पट्टी न करें, क्योंकि इसे पहचानकर्ता के रूप में उपयोग किया जा सकता है। एक संशोधित regex 'preg_replace ('/ \\ u ([\ da-fA-F] {4}) /', '&#x\1;', $ str) का उपयोग करें 'इसके बजाय – rabudde

+0

ठीक है, मुझे यही चाहिए। मेरे स्ट्रिपिंग को बंद करना गलत है, यह मेरे पास एकमात्र पहचानकर्ता स्ट्रिप्स करता है। धन्यवाद @rabbude मैं आज रात का परीक्षण कर रहा हूं और इस उत्तर को आपके preg_replace से अपडेट कर दूंगा। – Theo

+1

दायां @rabbude, अब मुझे याद है कि मैंने \\ u का उपयोग क्यों नहीं किया: 'चेतावनी: preg_replace() [function.preg-replace]: संकलन विफल: पीसीआरई \ एल, \ l, \ N का समर्थन नहीं करता {name}, \ U, या \ u ऑफसेट 1' – Theo

10

/* समारोह परिवर्तित UTF8 एचटीएमएल के लिए php एएनएसआई को */

public static function Utf8_ansi($valor='') { 

    $utf8_ansi2 = array(
    "\u00c0" =>"À", 
    "\u00c1" =>"Á", 
    "\u00c2" =>"Â", 
    "\u00c3" =>"Ã", 
    "\u00c4" =>"Ä", 
    "\u00c5" =>"Å", 
    "\u00c6" =>"Æ", 
    "\u00c7" =>"Ç", 
    "\u00c8" =>"È", 
    "\u00c9" =>"É", 
    "\u00ca" =>"Ê", 
    "\u00cb" =>"Ë", 
    "\u00cc" =>"Ì", 
    "\u00cd" =>"Í", 
    "\u00ce" =>"Î", 
    "\u00cf" =>"Ï", 
    "\u00d1" =>"Ñ", 
    "\u00d2" =>"Ò", 
    "\u00d3" =>"Ó", 
    "\u00d4" =>"Ô", 
    "\u00d5" =>"Õ", 
    "\u00d6" =>"Ö", 
    "\u00d8" =>"Ø", 
    "\u00d9" =>"Ù", 
    "\u00da" =>"Ú", 
    "\u00db" =>"Û", 
    "\u00dc" =>"Ü", 
    "\u00dd" =>"Ý", 
    "\u00df" =>"ß", 
    "\u00e0" =>"à", 
    "\u00e1" =>"á", 
    "\u00e2" =>"â", 
    "\u00e3" =>"ã", 
    "\u00e4" =>"ä", 
    "\u00e5" =>"å", 
    "\u00e6" =>"æ", 
    "\u00e7" =>"ç", 
    "\u00e8" =>"è", 
    "\u00e9" =>"é", 
    "\u00ea" =>"ê", 
    "\u00eb" =>"ë", 
    "\u00ec" =>"ì", 
    "\u00ed" =>"í", 
    "\u00ee" =>"î", 
    "\u00ef" =>"ï", 
    "\u00f0" =>"ð", 
    "\u00f1" =>"ñ", 
    "\u00f2" =>"ò", 
    "\u00f3" =>"ó", 
    "\u00f4" =>"ô", 
    "\u00f5" =>"õ", 
    "\u00f6" =>"ö", 
    "\u00f8" =>"ø", 
    "\u00f9" =>"ù", 
    "\u00fa" =>"ú", 
    "\u00fb" =>"û", 
    "\u00fc" =>"ü", 
    "\u00fd" =>"ý", 
    "\u00ff" =>"ÿ"); 

    return strtr($valor, $utf8_ansi2);  

} 
+1

उपयोगी कार्य। यह मेरी समस्या का समाधान किया। – pollux1er

संबंधित मुद्दे