Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/246.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php parse_str convert plus(+;)到空格_Php - Fatal编程技术网

php parse_str convert plus(+;)到空格

php parse_str convert plus(+;)到空格,php,Php,我使用parse_str从字符串中获取数组,如下所示: $str='a=123&b=456&Signature=aaaa/bbb+i8=&Satus=bbbb'; 我注意到函数parse_str确实将plus转换为space,但是如何避免这种情况呢 新编辑: 将$str转换为我从字符串中获得的值,如下所示: YT0xMjMmYj00NTYmU2lnbmF0dXJlPWFhYWEvYmJiK2k4PSZTYXR1cz1iYmJi 我得到字符串并进行base64解码,然后

我使用
parse_str
从字符串中获取数组,如下所示:

$str='a=123&b=456&Signature=aaaa/bbb+i8=&Satus=bbbb';
我注意到函数
parse_str
确实将plus转换为space,但是如何避免这种情况呢

新编辑:
$str
转换为我从字符串中获得的值,如下所示:

YT0xMjMmYj00NTYmU2lnbmF0dXJlPWFhYWEvYmJiK2k4PSZTYXR1cz1iYmJi

我得到字符串并进行base64解码,然后得到
$str

这是因为parse\u str in用于查询字符串,并且每当字符串中有空格时,它就会转换为+,因此parse\u str将+转换为空格

<?php
$str='a=123&b=456&Signature=aaaa/bbb+i8=&Satus=bbbb';
$new_string = str_replace('+', '.', $str);
parse_str($new_string,$old_string);
$signature = str_replace('.', '+', $old_string['Signature']);
?>
您可以通过str_replace传递字符串以撤消此操作

$old_string=“a=123&b=456&Signature=aaaa/bbb+i8=&Satus=bbbbbb”; $string=parse_str($old_string); $new_string=str_replace('+','$string)


如果您面临任何问题,请让我知道您应该详细说明给定代码的用途。它是用于HTTP请求(如curl-post方法)还是请求URL-GET方法

如果它是一个url,那么尝试使用str_replace方法替换这些字符,或者使用urlencode方法

请参阅这些手册: 和

也请阅读以下内容:

这是因为需要一个字符串作为其第一个参数,或者更具体地说,是一个mime类型的
应用程序/x-www-form-urlencoded

由于历史原因,
+
-符号除了其百分比编码对应物
%20
,在这种mime类型的上下文中也被解释为空格:

应用程序/x-www-form-urlencoded类型
[…]默认情况下使用的编码基于 通用URI百分比编码规则,经过多次修改 例如换行规范化和将空格替换为+而不是 %20.[…]

因此,您需要确保为
parse_str()
提供正确的URL编码字符串,以获得所需的字符。如果您需要一个
+
,则在将其传递到
parse_str()

之前,应首先将其正确地百分比编码为
%2B

那么你的意思是我应该在
解析str($str,$arrRes)
之前这样做
str_replace('+','%2B',$str)
?@code.g是的,但是
str_replace('+','$str)实际上也会起作用。我只是想在我的回答中透彻一些。还有一件事:如果base64编码的数据表示实际的符合查询字符串的数据,那么如果
+
-符号是以文字形式表示的,那么您可能还需要将URL编码告知您从谁那里收到的信息。