Декодирование URL в PHP

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

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

это выход...

'Antônio Carlos Jobim'

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

'Antônio Carlos Jobim'

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

5 ответов


ваши строки и кодировка UTF-8. Это сработает:

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

Вывод: "Antônio Carlos Jobim".


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

Edit: например:

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

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

кажется, проблема с символами UTF-8 и как PHP обрабатывает


когда я делаю

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