2009-11-18 3 views
24

Я пытаюсь расшифровать этот URL строку с помощью функции urldecode РНР:URL Декодирование в PHP

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

Предполагается, что это выход ...

'Antônio Carlos Jobim' 

... но вместо этого ouptutting это

'Antônio Carlos Jobim' 

Я проверил строку в JS-based online decoder с большим успехом, но не могу это сделать Operati на стороне сервера. Есть идеи?

+1

Какой метод вы используете для вывода его? – Kazar

ответ

47

Ваша строка также UTF-8 закодирован. Это будет работать:

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

Выход: «Antônio Carlos Jobim».

+4

, только если объявлена ​​страница 'ISO-8859-1'. – Kornel

12

На самом деле, вы получаете желаемый результат, но он не интерпретируется как UTF-8. Если это приложение HTTP, вы должны отправить заголовок или метатег (или оба), которые будут сообщать клиенту использовать UTF-8.

Edit:, например:

// 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, я получил тот же результат, что и вы.

Кажется, проблема с символами UTF-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

Смежные вопросы