Php 面临parse_str()的问题,替换+;字符到空间
我有以下字符串url: HostName=MyHostName;SharedAccessKeyName=某物;SharedAccessKey=值+值= 我需要提取数组中的键值对。我在PHP中使用了Php 面临parse_str()的问题,替换+;字符到空间,php,regex,urlencode,Php,Regex,Urlencode,我有以下字符串url: HostName=MyHostName;SharedAccessKeyName=某物;SharedAccessKey=值+值= 我需要提取数组中的键值对。我在PHP中使用了parse_str(),下面是我的代码: <?php $arr = array(); $str = "HostName=MyHostName&SharedAccessKeyName=SOMETHING&SharedAccessKey=VALUE+VALUE="; parse_str
parse_str()
,下面是我的代码:
<?php
$arr = array();
$str = "HostName=MyHostName&SharedAccessKeyName=SOMETHING&SharedAccessKey=VALUE+VALUE=";
parse_str($str,$arr);
var_dump($arr);
您可以在SharedAccessKey
char+
中看到,对于这个问题,我引用了,根据OP场景,标记的答案不是正确的,这表示首先执行urlencode()
,然后传递它,因为parse_str()
首先解码URL,然后分离键值,但这将返回单个数组的数组对象,该数组返回整个字符串,就像我的情况一样,其输出如下:
Array
(
[HostName=MyHostName&SharedAccessKeyName=SOMETHING&SharedAccessKey=VALUE+VALUE=] =>
)
请帮助我,不仅仅是因为
+
字符,而是因为所有字符都应该与parse_str()
相同。您可以尝试使用以下方法模拟parse_str
:
输出:
Array (
[HostName] => MyHostName
[SharedAccessKeyName] => SOMETHING
[SharedAccessKey] => VALUE+VALUE=
)
$str=“HostName=MyHostName&SharedAccessKeyName=SOMETHING&SharedAccessKey=VALUE+VALUE=”;
preg|u match|u all('/(?:^ | G)(w+)=([^&]+)(?:&|$)/',$str,$matches);
打印(数组合并($matches[1],$matches[2]) 如果您想要
urlencode
,您可以使用类似array_-map(函数($x){return urlencode($x);},$arr)代码>。否则,为什么不干脆用str\u替换+
s的空格呢?我不需要urlencode
,如果我用+
替换的空格,如果字符串中也有类似的字符,比如+
,那么我怎么能找到呢?我对最后一个值的尾随=/code>感到有点困惑,这应该是值的一部分吗?是@Nick这是我的SharedAccessKey
key值的一部分,它可以包含任何字符here@BunkerBoy它唯一的限制是键名由字母数字字符或
组成,并且值不能包含&
。第一个限制可以通过将(\w+)
替换为([^=]+)
来轻松匹配除=
之外的任何内容。
是@Nick我已经测试了你的正则表达式,它对我很有吸引力。谢谢(y)与Nick的答案相同,给出任何其他方式,请格式化你的答案。你必须更清楚你给出的答案。
preg_match_all('/(?:^|\G)(\w+)=([^&]+)(?:&|$)/', $str, $matches);
print_r(array_combine($matches[1], $matches[2]));
Array (
[HostName] => MyHostName
[SharedAccessKeyName] => SOMETHING
[SharedAccessKey] => VALUE+VALUE=
)