2010-04-01 4 views
0

ли Ther любой встроенной функции в PHP для декодированияPOST Строка Декодирование в PHP

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

в

przysięgam służyć

?

+1

Вы уверены, что программа генерирование этих строк знает, что он делает? Если это строковая кодировка UTF-8, она должна читать «przysi% 25% C4% 25% 99gam ...», то есть оба байта кодируются по URL-адресу. – Boldewyn

ответ

2

Ok, Гордон и Manos, вы оба правы (и оба не правы;)

Это просто нормальный 'urldecode', но применяется дважды

$a = "przysi%25C4%2599gam%2520s%25C5%2582u%25C5%25BCy%25C4%2587"; 
$b = urldecode(urldecode($a)); 
var_dump($b); 
+0

Это интересно, потому что String отправляется смертельным JS-скриптом, использующим encodeURLEntity() - не знаю, почему материал закодирован дважды, а затем – clops

+0

Спасибо за головы, хотя! – clops

2

urldecode - декодирует URL-закодированные строки

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

+0

Отрицательный. Urldecode терпит неудачу в этом случае, поскольку он декодирует только символы% ##. – clops

0

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

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

Edit: Ваша начальная строка перепутались. Вы дважды указали его? Причина utf8_urldecode (utf8_urldecode ($ encoded string)) дает правильный результат.

+0

дал 'przysi% C4% 99gam% 20s% C5% 82u% C5% BCy% C4% 87' на моей машине. – Gordon

2

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

Проверьте, пожалуйста, urldecode manual page comments.

 Смежные вопросы

  • Нет связанных вопросов^_^