Ответ 1
Ваша строка также кодируется в кодировке UTF-8. Это будет работать:
echo utf8_decode(urldecode("Ant%C3%B4nio+Carlos+Jobim"));
Результат: "Антонио Карлос Жобим".
Я пытаюсь декодировать эту строку URL с помощью функции PHP urldecode:
urldecode("Ant%C3%B4nio+Carlos+Jobim");
Это должно выводиться...
'Antônio Carlos Jobim'
..., но вместо этого он выполняет эту функцию
'Antônio Carlos Jobim'
Я успешно тестировал строку в JS-based онлайн-декодере с большим успехом, но, похоже, не может выполнять эту операцию на стороне сервера, Любые идеи?
Ваша строка также кодируется в кодировке 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
, прежде чем повторять его на странице? Когда я только что протестировал ваш код, он отлично работал с частью 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