我有一个URL,我正在通过jQuery ajax调用(使用encodeURIComponent)并在另一端用PHP解码。我发现我认为在PHP端的rawurldecode()之间存在问题,但是当使用JUST PHP到rawurlencode()和rawurldecode()测试URL时,我设法得到同样的问题 - 有人可以向我指出什么我需要在这里做什么?
重现:
$thing = rawurlencode("www.nzballet.org.nz?pa=thisthing&parmater1=23a¶mter2=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 - 有人可以为我说明为什么我会在那里得到那个奇怪的角色吗?
谢谢!
答案 0 :(得分:0)
看起来您的网络浏览器看到¶
,并假设您的意思是¶
,这是段落符号(¶)的实体。有关该问题的更多讨论,请参见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;'