我收到一个查询字符串(来自一个可怕的支付系统,其名称我不想公开),其中包含未编码的&符号
name=joe+jones&company=abercrombie&fitch&other=no
parse_str无法处理这个问题,而且我不知道正则表达式是否能够提出我自己的方案(尽管我确实尝试过)。我的挂机是前瞻性的正则表达式,我不太明白。
我在寻找:
Array
(
[name] => joe jones
[company] => abercrombie&fitch
[other] => no
)
我想过穿过琴弦,&符号&符号,但这看起来很傻。帮助
答案 0 :(得分:2)
这个怎么样:
如果两个&符号之间没有=
,则编码第一个&符号。然后将结果传递给普通的查询字符串解析器。
那应该完成你的任务。这是有效的,因为“普通”查询字符串的模式应始终等于符号和符号;因此连续两个&符号意味着其中一个应该被编码,只要键中没有符号,行中的最后一个&符号始终是新键之前的“真正”符号。
您应该能够使用以下正则表达式进行编码:
$better_qs = preg_replace("/&(?=[^=]*&)/", "%26", $bad_qs);
答案 1 :(得分:0)
您还可以使用split()函数将字符串拆分为&符号。之后,您可以使用分隔符“=”再次拆分每个元素......类似于:
$myarray = split("&", $mystring);
foreach ($myarray as $element) {
$keyvalue = split("=", $element);
$resultarray[$keyvalue[0]] = $keyvalue[1];
}
print_r($resultarray);
未经测试!但你应该明白这一点。