Декодирование строки POST в PHP - PullRequest
0 голосов
/ 01 апреля 2010

Есть ли встроенная в PHP функция для декодирования

przysi% 25C4% 2599gam% 2520s% 25C5% 2582u% 25C5% 25BCy% 25C4% 2587

в

przysięgam służyć

Ответы [ 4 ]

2 голосов
/ 01 апреля 2010

Хорошо, Гордон и Манос, вы оба правы (и оба неправы)

Это просто обычный urldecode, но применяется дважды

$a = "przysi%25C4%2599gam%2520s%25C5%2582u%25C5%25BCy%25C4%2587";
$b = urldecode(urldecode($a));
var_dump($b);
2 голосов
/ 01 апреля 2010

Я предполагаю, что у вас есть проблемы с urldecode и многобайтовыми символами. Urldecode может декодировать только 8-битные символы, а ваша строка содержит многобайтовые символы.

Проверьте комментарии к странице руководства urldecode для некоторых решений.

2 голосов
/ 01 апреля 2010

urldecode - Декодирует строку в кодировке URL

Но я думаю, что это не будет работать на многобайтовых строках. См. Комментарии на странице руководства для возможных обходных путей для пользователя, а также http://www.zend.com//code/codex.php?ozid=839&single=1

0 голосов
/ 01 апреля 2010

Вы пробовали это:

    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 ($ кодированная строка)) дает правильный результат.

...