我有以下字符串url:
主机名= MYHOSTNAME; SharedAccessKeyName =东西; SharedAccessKey = VALUE + VALUE =
我需要在数组中提取键值对。我用PHP中的parse_str()
是我的代码:
<?php
$arr = array();
$str = "HostName=MyHostName&SharedAccessKeyName=SOMETHING&SharedAccessKey=VALUE+VALUE=";
parse_str($str,$arr);
var_dump($arr);
输出:
array (
'HostName' => 'MyHostName',
'SharedAccessKeyName' => 'SOMETHING',
'SharedAccessKey' => 'VALUE VALUE=',
)
你可以看到SharedAccessKey
char +
被space
替换为这个问题,我提到了Similiar Question,根据OP场景标记答案是不正确的,这说首先做urlencode()
然后传递它因为parse_str()
首先解码URL然后将键值分开但这将返回单个数组的数组对象,该数组返回整个字符串,就像我的情况一样,它的输出如下:
Array
(
[HostName=MyHostName&SharedAccessKeyName=SOMETHING&SharedAccessKey=VALUE+VALUE=] =>
)
请帮助我,不仅仅是+
char而不是所有的角色都应该和parse_str()
一样
你可以尝试用parse_str
模拟preg_match_all
:
preg_match_all('/(?:^|\G)(\w+)=([^&]+)(?:&|$)/', $str, $matches);
print_r(array_combine($matches[1], $matches[2]));
输出:
Array (
[HostName] => MyHostName
[SharedAccessKeyName] => SOMETHING
[SharedAccessKey] => VALUE+VALUE=
)
$ str =“HostName = MyHostName&SharedAccessKeyName = SOMETHING&SharedAccessKey = VALUE + VALUE =”; preg_match_all('/(?:^ | G)(w +)=([^&] +)(?:&| $)/',$ str,$ matches); print_r(array_combine($ matches [1],$ matches [2]));