2012-03-20 65 views
2

我有一个URL,我通过jQuery ajax调用(使用encodeURIComponent)和解码在PHP另一端。我发现我认为是PHP之间的rawurldecode()之间的问题,但是当使用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(阿贾克斯)和PHP之间传递时,我得到了,所以它什么都没有做与一部分。我在HTML标头中指定了charset = UTF-8 - 有人能告诉我为什么我要在那里得到那个奇怪的字符吗?

谢谢!

+0

对我很好:http://codepad.org/LCjJ6dlO – Brad 2012-03-20 21:51:52

回答

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

辉煌 - 谢谢 - 这就是我错过的! – 2012-03-20 22:08:15