2012-03-20 3 views
2

У меня есть URL-адрес, через который я передаю вызов jQuery ajax (используя encodeURIComponent) и декодирование в PHP на другом конце. Я нашел то, что, как я думал, было проблемой между rawurldecode() на конце PHP, но при использовании JUST PHP для rawurlencode() и rawurldecode() тестового URL мне удалось получить ту же проблему - может кто-то указать мне, что Мне нужно здесь?Rawurlencode и декодирование причуды?

Для воспроизведения:

$thing = rawurlencode("www.nzballet.org.nz?pa=thisthing&parmater1=23a&paramter2=another"); 
echo $thing; 

Это будет производить:

www.nzballet.org.nz% 3Fpa% 3Dthisthing% 26parmater1% 3D23a% 26paramter2% 3Danother

Если я тогда:

$rawurl = "www.nzballet.org.nz%3Fpa%3Dthisthing%26parmater1%3D23a%26paramter2%3Danother"; 
$decoded = rawurldecode($rawurl); 
echo $decoded; 

я получаю:

www.nzballet.org.nz?pa=thisthing & parmater1 = 23a¶mter2 = другой

Это тот же результат, я получил при переходе между JQuery (AJAX) и PHP, так что это не имеет ничего общего с этим Часть этого. У меня есть charset = UTF-8, указанный в заголовке HTML - может кто-нибудь рассказать мне, почему я получаю этот странный персонаж?

Спасибо!

+0

Прекрасно работает для меня: http://codepad.org/LCjJ6dlO – Brad

ответ

0

Похоже, что ваш веб-браузер видит &para и предполагает, что вы имели в виду ¶, который является сущностью для символа абзаца (¶). См. https://meta.stackexchange.com/questions/100905/para-turns-into-within-pre для более подробного обсуждения этой проблемы.

Чтобы обойти это, кодировать объекты с htmlspecialchars перед отображением:

$rawurl = "www.nzballet.org.nz%3Fpa%3Dthisthing%26parmater1%3D23a%26paramter2%3Danother"; 
$decoded = rawurldecode($rawurl); 
echo htmlspecialchars($decoded); 

Из инструкции:

Некоторые символы имеют особое значение в HTML и должны быть представлены HTML если они хотят сохранить свои значения.

...

'&' (амперсанд) становится '& усилитель;'

+0

Блестящий - спасибо - это было то, чего мне не хватало! –

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