2009-11-18 12 views
24

मैं PHP के urldecode समारोह का उपयोग कर इस URL स्ट्रिंग डिकोड करने के लिए कोशिश कर रहा हूँ में डिकोडिंग:यूआरएल पीएचपी

urldecode("Ant%C3%B4nio+Carlos+Jobim"); 

यह आउटपुट माना जाता है ...

'Antônio Carlos Jobim' 

... लेकिन इसके बजाय इस ouptutting है

'Antônio Carlos Jobim' 

मैं बड़ी सफलता के साथ एक JS-based online decoder में स्ट्रिंग परीक्षण किया है, लेकिन इस operati करने के लिए नहीं कर पा रहे सर्वर की ओर। कोई विचार?

+1

क्या विधि का प्रयोग कर रहे यह उत्पादन के लिए? – Kazar

उत्तर

47

आपकी स्ट्रिंग भी यूटीएफ -8 एन्कोडेड है। यह काम करेगा:

echo utf8_decode(urldecode("Ant%C3%B4nio+Carlos+Jobim")); 

आउटपुट: "एंटोनीओ कार्लोस जॉबिम"।

+4

केवल तभी यदि पृष्ठ 'आईएसओ -885 9 -1' एन्कोडिंग घोषित किया गया हो। – Kornel

12

असल में, आपको वांछित आउटपुट मिलता है, लेकिन इसे यूटीएफ -8 के रूप में नहीं समझा जाता है। यदि यह एक HTTP अनुप्रयोग पर है, तो आपको एक हेडर या मेटा टैग (या दोनों) भेजना चाहिए जो क्लाइंट को यूटीएफ -8 का उपयोग करने के लिए कहता है।

// replace text/html with the content type you're using 
header('Content-Type: text/html; charset=UTF-8'); 
1

आप भी पृष्ठ पर यह गूंज से पहले htmlenteties उपयोग कर रहे हैं: उदाहरण के लिए:

संपादित करें? जब मैंने अभी आपके कोड का परीक्षण किया तो यह urldecode("Ant%C3%B4nio+Carlos+Jobim"); भाग के साथ ठीक काम करता था, लेकिन जब मैंने htmlentities के माध्यम से इसे चलाया तो मुझे वही आउटपुट मिला जैसा आपने किया था।

यह यूटीएफ -8 अक्षरों के साथ एक समस्या है और PHP htmlentities फ़ंक्शन को कैसे प्रबंधित करता है।

+1

यदि आप सही एन्कोडिंग को '$ charset' पैरामीटर के रूप में निर्दिष्ट करते हैं तो यह सही तरीके से काम करता है। और वैसे भी, आपको 'htmlspecialchars' का उपयोग करना चाहिए, न कि 'htmlentities', यदि आप जो करना चाहते हैं वह XSS से सुरक्षित है। –

1

जब मैं

एंटोनियो कार्लोस की तरह अपने ब्राउज़र में

<?php 
echo urldecode("Ant%C3%B4nio+Carlos+Jobim"); 
?> 

इसका प्रदर्शन सही ढंग से कर जोबि

मैं XAMPP

0

साथ परीक्षण किया है एक और विकल्प है:

<?php 
$smthing = 'http%3A%2F%2Fmysite.com'; 
$smthing = preg_replace("/%u([0-9a-f]{3,4})/i","&#x\\1;",urldecode($smthing)); 
$smthing = html_entity_decode($smthing,null,'UTF-8'); 
echo $smthing; 
?> 

उत्पादन हो जाता है: http://mysite.com