it-swarm.com.ru

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

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

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

Это должно быть выведено ...

'Antônio Carlos Jobim'

... но вместо этого отключает это

'Antônio Carlos Jobim'

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

31
Brandon Jackson

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

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

Результат: «Антониу Карлос Хобим».

60
Kristoffer Bohmann

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

Правка: например:

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

когда я делаю

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

Его отображение правильно в моем браузере, как

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

Я проверил с XAMPP

2
YOU

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

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

1
Doug Neiner

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

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

0
T.Todua