URL查询的PHP parse_str返回键名称中带有“amp”的数组键

时间:2016-07-26 19:50:31

标签: php arrays string parsing

环境:主机(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服务器上没有)?或者我又困惑了?

2 个答案:

答案 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可能来自您无法控制的地方,并且可能包含被故意编码为安全措施的实体,例如&quot;或{{1 }}或&lt;等...

因此,如果您解码所有实体,然后解析数据,然后以某种方式将此数据返回给用户,则可能会执行一些不需要的&gt;。 我认为将<script>仅替换为&amp;并保留其他实体的编码会更安全。 像这样:&

如果我错了,请纠正我