2010-07-22 8 views

उत्तर

2

आम तौर पर यह urldecode तरीका होगा, लेकिन यह आपके जैसे, यूनिकोड वर्ण पर लागू नहीं होता। ऐसा

function unicode_urldecode($url) 
{ 
    preg_match_all('/%u([[:alnum:]]{4})/', $url, $a); 

    foreach ($a[1] as $uniord) 
    { 
     $utf = '&#x' . $uniord . ';'; 
     $url = str_replace('%u'.$uniord, $utf, $url); 
    } 

    return urldecode($url); 
} 
+3

गलत यहाँ कई चीजें हैं ... आप% \ uXXXX की uXXXX बजाय स्थानापन्न, संस्थाओं के साथ दृश्यों (जो स्ट्रिंग प्रदर्शित करने के लिए ठीक होगा की जगह, सिवाय अब आप htmlspecialchars एनकोड स्ट्रिंग दोगुना करने के लिए नहीं बताने के लिए है और बेशक, अब आप एचटीएमएल एंटाइटिट्स को अलग नहीं करते हैं जो मूल रूप से जेनरेट किए गए लोगों के लिए स्ट्रिंग में हैं); अंत में आप urldecode जो सवाल के साथ कोई संबंध नहीं है कहते हैं - यूआरएल एन्कोडिंग encodes बाइट्स (अधिकतम मूल्य% एफएफ है) और यह निश्चित रूप से आपने अभी बनाया एचटीएमएल संस्थाओं को डिकोड नहीं है। – Artefacto

6

UTF-8 में बदलने के लिए,: बजाय यह एक प्रयास करें

preg_replace('/\\\\u([0-9a-f]{4})/ie', 
    'mb_convert_encoding("&#x$1;", "UTF-8", "HTML-ENTITIES")', 
    $string); 

इस के बाद से JSON में इस्तेमाल किया बचाव किया जाता है, एक और विकल्प json_decode होगा। लेकिन यह भी (\uXXXX भागने दृश्यों के उनके अलावा) से पहले दोहरे उद्धरण चिह्नों और बैकस्लैश से बचने और स्ट्रिंग को दोहरे उद्धरण चिह्नों को जोड़ने की आवश्यकता होगी। अगर, हालांकि, स्ट्रिंग वास्तव में JSON-एन्कोड किया गया है और वह है क्या मूल रूप से सवाल प्रेरित है, सही उत्तर स्वाभाविक रूप से उपरोक्त विधि के बजाय json_decode का उपयोग किया जाएगा।

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