面临 parse_str() 问题,将 + 字符替换为 space
Facing issue with parse_str(), Replacing + char to space
我有以下字符串 url:
HostName=MyHostName;SharedAccessKeyName=SOMETHING;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
字符 +
被替换为 space
对于这个问题,我参考了 ,标记的答案是不正确的对于 OP 场景,这表示首先执行 urlencode()
然后传递它,因为 parse_str()
首先解码 URL 然后分离键值,但这将 return 的数组对象单个数组 return 整个字符串就像我的情况一样它的输出是这样的:
Array
(
[HostName=MyHostName&SharedAccessKeyName=SOMETHING&SharedAccessKey=VALUE+VALUE=] =>
)
请帮帮我,不仅仅是 +
个字符,而是所有字符都应该与 parse_str()
相同
您可以尝试用 preg_match_all
模拟 parse_str
:
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]));
我有以下字符串 url:
HostName=MyHostName;SharedAccessKeyName=SOMETHING;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
字符 +
被替换为 space
对于这个问题,我参考了 urlencode()
然后传递它,因为 parse_str()
首先解码 URL 然后分离键值,但这将 return 的数组对象单个数组 return 整个字符串就像我的情况一样它的输出是这样的:
Array
(
[HostName=MyHostName&SharedAccessKeyName=SOMETHING&SharedAccessKey=VALUE+VALUE=] =>
)
请帮帮我,不仅仅是 +
个字符,而是所有字符都应该与 parse_str()
您可以尝试用 preg_match_all
模拟 parse_str
:
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]));