Есть ли встроенная в PHP функция для декодирования
przysi% 25C4% 2599gam% 2520s% 25C5% 2582u% 25C5% 25BCy% 25C4% 2587
в
przysięgam służyć
Хорошо, Гордон и Манос, вы оба правы (и оба неправы)
Это просто обычный urldecode, но применяется дважды
$a = "przysi%25C4%2599gam%2520s%25C5%2582u%25C5%25BCy%25C4%2587"; $b = urldecode(urldecode($a)); var_dump($b);
Я предполагаю, что у вас есть проблемы с urldecode и многобайтовыми символами. Urldecode может декодировать только 8-битные символы, а ваша строка содержит многобайтовые символы.
Проверьте комментарии к странице руководства urldecode для некоторых решений.
urldecode - Декодирует строку в кодировке URL
Но я думаю, что это не будет работать на многобайтовых строках. См. Комментарии на странице руководства для возможных обходных путей для пользователя, а также http://www.zend.com//code/codex.php?ozid=839&single=1
Вы пробовали это:
function utf8_urldecode($str) { $str = preg_replace("/%u([0-9a-f]{3,4})/i","&#x\\1;",urldecode($str)); return html_entity_decode($str,null,'UTF-8');; }
Взято из http://php.net/manual/en/function.urldecode.php
Редактировать: Ваша начальная строка испорчена. Ты дважды это кодировал? Причина utf8_urldecode (utf8_urldecode ($ кодированная строка)) дает правильный результат.