Rawurlencode和解码怪癖?

时间:2012-03-20 21:48:02

标签: php html

我有一个URL,我正在通过jQuery ajax调用(使用encodeURIComponent)并在另一端用PHP解码。我发现我认为在PHP端的rawurldecode()之间存在问题,但是当使用JUST PHP到rawurlencode()和rawurldecode()测试URL时,我设法得到同样的问题 - 有人可以向我指出什么我需要在这里做什么?

重现:

$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=another

这与我在jQuery(ajax)和PHP之间传递时得到的输出相同,所以它与它的那部分无关。我在HTML标题中指定了charset = UTF-8 - 有人可以为我说明为什么我会在那里得到那个奇怪的角色吗?

谢谢!

1 个答案:

答案 0 :(得分: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实体表示,如果它们要保留它们的含义。

     

...

     

'&安培;' (&符号)变成'& amp;'