Расшифровка URL в PHP

Я пытаюсь декодировать эту строку URL, используя функцию urldecode PHP:

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

Это должно выводить …

 'Antônio Carlos Jobim' 

… но вместо этого

 'Antônio Carlos Jobim' 

Я тестировал строку в онлайн-декодере на основе JS с большим успехом, но, похоже, не могу выполнить эту операцию на стороне сервера. Есть идеи?

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

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

Вывод: «Антонио Карлос Жобим».

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

Изменить: например:

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

Вы также используете htmlenteties прежде чем htmlenteties его на странице? Когда я только что протестировал ваш код, он отлично работал с только urldecode("Ant%C3%B4nio+Carlos+Jobim"); часть, но когда я запускал ее через htmlentities я получил тот же результат, что и вы.

Кажется, что проблема с символами UTF-8 и как PHP обрабатывает функцию htmlentities .

когда я делаю

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

Его отображение в моем браузере

Антонио Карлос Жобим

Я тестировал XAMPP

другой вариант:

 <?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