नीचे दी गई कोड लाइनों का उपयोग किया जा सकता है, जहां UTF-8 इनपुट अपेक्षित है।
$chr_map = array(
// Windows कोडपेज 1252
"\xC2\x82" => "'", // U+0082→U+201A सिंगल लो-9 कोटेशन मार्क
"\xC2\x84" => '"', // U+0084→U+201E डबल लो-9 कोटेशन मार्क
"\xC2\x8B" => "'", // U+008B→U+2039 सिंगल लेफ्ट-पॉइंटिंग एंगल कोटेशन मार्क
"\xC2\x91" => "'", // U+0091→U+2018 लेफ्ट सिंगल कोटेशन मार्क
"\xC2\x92" => "'", // U+0092→U+2019 राइट सिंगल कोटेशन मार्क
"\xC2\x93" => '"', // U+0093→U+201C लेफ्ट डबल कोटेशन मार्क
"\xC2\x94" => '"', // U+0094→U+201D राइट डबल कोटेशन मार्क
"\xC2\x9B" => "'", // U+009B→U+203A सिंगल राइट-पॉइंटिंग एंगल कोटेशन मार्क
// नियमित यूनिकोड
// U+0022 कोटेशन मार्क (")
// U+0027 एपोस्ट्रोफी (')
"\xC2\xAB" => '"', // U+00AB लेफ्ट-पॉइंटिंग डबल एंगल कोटेशन मार्क
"\xC2\xBB" => '"', // U+00BB राइट-पॉइंटिंग डबल एंगल कोटेशन मार्क
"\xE2\x80\x98" => "'", // U+2018 लेफ्ट सिंगल कोटेशन मार्क
"\xE2\x80\x99" => "'", // U+2019 राइट सिंगल कोटेशन मार्क
"\xE2\x80\x9A" => "'", // U+201A सिंगल लो-9 कोटेशन मार्क
"\xE2\x80\x9B" => "'", // U+201B सिंगल हाई-रिवर्स्ड-9 कोटेशन मार्क
"\xE2\x80\x9C" => '"', // U+201C लेफ्ट डबल कोटेशन मार्क
"\xE2\x80\x9D" => '"', // U+201D राइट डबल कोटेशन मार्क
"\xE2\x80\x9E" => '"', // U+201E डबल लो-9 कोटेशन मार्क
"\xE2\x80\x9F" => '"', // U+201F डबल हाई-रिवर्स्ड-9 कोटेशन मार्क
"\xE2\x80\xB9" => "'", // U+2039 सिंगल लेफ्ट-पॉइंटिंग एंगल कोटेशन मार्क
"\xE2\x80\xBA" => "'", // U+203A सिंगल राइट-पॉइंटिंग एंगल कोटेशन मार्क
);
$char_val = array_keys($chr_map);
// लेकिन: दक्षता के लिए आपको
$rpl = array_values($chr_map);
// इन दो सरणियों को पूर्व-गणना करनी चाहिए
$str = str_replace($char_val, $rpl, html_entity_decode($str, ENT_QUOTES, "UTF-8"));
व्याख्या
प्रत्येक यूनिकोड कैरेक्टर ठीक एक "जनरल कैटेगरी" से संबंधित होता है।
इनमें से, जिनमें कोट कैरेक्टर हो सकते हैं वे हैं:
Ps "Punctuation, Open" Pe "Punctuation, Close" Pi "Punctuation, Initial quote (इसके उपयोग के आधार पर Ps या Pe की तरह व्यवहार कर सकता है)" Pf "Punctuation, Final quote (इसके उपयोग के आधार पर Ps या Pe की तरह व्यवहार कर सकता है)" Po "Punctuation, Other"
यदि उपयोगकर्ता इनपुट के UTF-8 एन्कोडेड होने के बारे में सुनिश्चित नहीं है, तो अन्य ऑपरेशन करने से पहले नीचे दिया गया कोड रखा जा सकता है:
if (!preg_match('/^\\X*$/u', $str)) {
$str = utf8_encode($str);
}
यदि डेटा को 0x80-0x9F रेंज में सामान्यीकृत करने की आवश्यकता है, तो नीचे दिया गया कोड उपयोग किया जा सकता है:
$normalization_map = array(
"\xC2\x80" => "\xE2\x82\xAC", // U+20AC यूरो साइन
"\xC2\x82" => "\xE2\x80\x9A", // U+201A सिंगल लो-9 कोटेशन मार्क
"\xC2\x83" => "\xC6\x92", // U+0192 हुक के साथ लैटिन स्मॉल लेटर f
"\xC2\x84" => "\xE2\x80\x9E", // U+201E डबल लो-9 कोटेशन मार्क
"\xC2\x85" => "\xE2\x80\xA6", // U+2026 हॉरिजॉन्टल एलिप्सिस
"\xC2\x86" => "\xE2\x80\xA0", // U+2020 डैगर
"\xC2\x87" => "\xE2\x80\xA1", // U+2021 डबल डैगर
"\xC2\x88" => "\xCB\x86", // U+02C6 मॉडिफायर लेटर सर्कमफ्लेक्स एक्सेंट
"\xC2\x89" => "\xE2\x80\xB0", // U+2030 प्रति मिल साइन
"\xC2\x8A" => "\xC5\xA0", // U+0160 कैरन के साथ लैटिन कैपिटल लेटर s
"\xC2\x8B" => "\xE2\x80\xB9", // U+2039 सिंगल लेफ्ट-पॉइंटिंग एंगल कोटेशन मार्क
"\xC2\x8C" => "\xC5\x92", // U+0152 लैटिन कैपिटल लिगेचर oe
"\xC2\x8E" => "\xC5\xBD", // U+017D कैरन के साथ लैटिन कैपिटल लेटर z
"\xC2\x91" => "\xE2\x80\x98", // U+2018 लेफ्ट सिंगल कोटेशन मार्क
"\xC2\x92" => "\xE2\x80\x99", // U+2019 राइट सिंगल कोटेशन मार्क
"\xC2\x93" => "\xE2\x80\x9C", // U+201C लेफ्ट डबल कोटेशन मार्क
"\xC2\x94" => "\xE2\x80\x9D", // U+201D राइट डबल कोटेशन मार्क
"\xC2\x95" => "\xE2\x80\xA2", // U+2022 बुलेट
"\xC2\x96" => "\xE2\x80\x93", // U+2013 एन डैश
"\xC2\x97" => "\xE2\x80\x94", // U+2014 एम डैश
"\xC2\x98" => "\xCB\x9C", // U+02DC स्मॉल टिल्डे
"\xC2\x99" => "\xE2\x84\xA2", // U+2122 ट्रेड मार्क साइन
"\xC2\x9A" => "\xC5\xA1", // U+0161 कैरन के साथ लैटिन स्मॉल लेटर s
"\xC2\x9B" => "\xE2\x80\xBA", // U+203A सिंगल राइट-पॉइंटिंग एंगल कोटेशन मार्क
"\xC2\x9C" => "\xC5\x93", // U+0153 लैटिन स्मॉल लिगेचर oe
"\xC2\x9E" => "\xC5\xBE", // U+017E कैरन के साथ लैटिन स्मॉल लेटर z
"\xC2\x9F" => "\xC5\xB8", // U+0178 डायरेसिस के साथ लैटिन कैपिटल लेटर y
);
$chr = array_keys($normalization_map);
// लेकिन: दक्षता के लिए आपको
$rpl = array_values($normalization_map);
// इन दो सरणियों को पूर्व-गणना करनी चाहिए
$str = str_replace($chr, $rpl, $str);