php parse_str将plus(+)转换为空格

时间:2017-12-04 03:29:50

标签: php

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

$str='a=123&b=456&Signature=aaaa/bbb+i8=&Satus=bbbb';

我注意到函数parse_str确实将加号转换为空格,但我怎样才能避免这种情况。

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

YT0xMjMmYj00NTYmU2lnbmF0dXJlPWFhYWEvYmJiK2k4PSZTYXR1cz1iYmJi

我获取字符串并生成base64_decode,然后获取$str

4 个答案:

答案 0 :(得分:1)

这是因为parse_str()期望URL-encoded字符串作为其第一个参数,或者更具体地说,query string是mime-type application/x-www-form-urlencoded。< / p>

由于历史原因,+ - 符号除了百分比编码对应%20之外,在此mime类型的上下文中也被解释为空格。 Wikipedia has this to say about this

  

application / x-www-form-urlencoded type

           

[...]默认情况下使用的编码基于早期版本   一般URI百分比编码规则,有许多修改   例如换行标准化和用+替换空格而不是   %20。 [...]

因此,您需要确保向parse_str()提供正确的URL编码字符串,以获取您期望的字符。如果您希望+,则应先将其%2B正确地进行百分比编码,然后再将其传递给parse_str()

答案 1 :(得分:0)

这是因为parse_str意味着在查询字符串上使用,只要字符串中有空格,就会转换为+,因此parse_str会将+转换为空格。

你可以通过str_replace传递字符串来撤消这个

$ old_string =&#34; a = 123&amp; b = 456&amp; Signature = aaaa / bbb + i8 =&amp; Satus = bbbb&#34 ;; $ string = parse_str($ old_string); $ new_string = str_replace(&#39; +&#39;,&#39;&#39;,$ string);

如果您遇到任何问题,请知道

答案 2 :(得分:0)

你应该详细说明代码用于什么。是HTTP请求(如curl post方法)还是Request URL GET Method。

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

请参阅以下手册: http://php.net/manual/en/function.urlencode.phphttp://php.net/manual/en/function.parse-str.php

也读这个: http://php.net/manual/en/function.http-build-query.php

答案 3 :(得分:0)

malloc