面对parse_str()的问题,将+ char替换为空格

问题描述 投票:-1回答:2

我有以下字符串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()一样

php regex urlencode
2个回答
1
投票

你可以尝试用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= 
)

Demo on 3v4l.org


0
投票

$ str =“HostName = MyHostName&SharedAccessKeyName = SOMETHING&SharedAccessKey = VALUE + VALUE =”; preg_match_all('/(?:^ | G)(w +)=([^&] +)(?:&| $)/',$ str,$ matches); print_r(array_combine($ matches [1],$ matches [2]));

© www.soinside.com 2019 - 2024. All rights reserved.