我使用parse_str
从字符串中获取数组,如:
$str='a=123&b=456&Signature=aaaa/bbb+i8=&Satus=bbbb';
我注意到函数parse_str
确实将加号转换为空格,但我怎样才能避免这种情况。
新编辑:
$str
到我从字符串中得到的值,如下所示:
YT0xMjMmYj00NTYmU2lnbmF0dXJlPWFhYWEvYmJiK2k4PSZTYXR1cz1iYmJi
我获取字符串并生成base64_decode,然后获取$str
。
答案 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.php 和 http://php.net/manual/en/function.parse-str.php
也读这个: http://php.net/manual/en/function.http-build-query.php
答案 3 :(得分:0)
malloc