Декодирование 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