环境:主机(JustHost)上的测试站点上的Wordpress(最新),PHP版本5.4.43。
在URL查询上使用parse_str,结果数组返回amp; keyname的数组键名。示例代码:
$querystring = "ie=UTF8&qid=1468851514&sr=8-1&keywords=there&tag=sitename-20";
parse_str($querystring, $queryarray);
echo "<pre>";
print_r($queryarray);
echo "</pre>";
返回
Array
(
[ie] => UTF8
[amp;qid] => 1468851514
[amp;sr] => 8-1
[amp;keywords] => there
[amp;tag] => sitename-20
)
为什么'amp;'在关键名称?
这是一个PHP版本问题(它似乎在EasyPHP本地环境中运行正常 - 版本5.4.24,但在我托管地点的测试WP服务器上没有)?或者我又困惑了?
答案 0 :(得分:4)
&amp; 仅在以HTML / XML数据输出URL时使用。
您可以尝试使用 html_entity_decode()
$querystring = "ie=UTF8&qid=1468851514&sr=8-1&keywords=there&tag=sitename-20";
parse_str(html_entity_decode($querystring), $queryarray);
echo "<pre>";
print_r($queryarray);
echo "</pre>";
希望对您有帮助。
答案 1 :(得分:0)
如果您确定$querystring
不包含其他编码实体,则可以使用@ {Hugo E Sachez建议的html_entity_decode
。
但是在某些复杂的系统中,$querystring
可能来自您无法控制的地方,并且可能包含被故意编码为安全措施的实体,例如"
或{{1 }}或<
等...
因此,如果您解码所有实体,然后解析数据,然后以某种方式将此数据返回给用户,则可能会执行一些不需要的>
。
我认为将<script>
仅替换为&
并保留其他实体的编码会更安全。
像这样:&
如果我错了,请纠正我