我使用parse_str从字符串中获取数组,如下所示:
$str='a=123&b=456&Signature=aaaa/bbb+i8=&Satus=bbbb';我注意到函数parse_str确实将加号转换为空间,但是如何避免这种情况。
新编辑:
从字符串中获得的值的$str,如下所示:
YT0xMjMmYj00NTYmU2lnbmF0dXJlPWFhYWEvYmJiK2k4PSZTYXR1cz1iYmJi我得到字符串并使base64_decode,然后得到$str。
发布于 2017-12-04 03:52:17
这是因为parse_str()需要一个URL编码字符串作为它的第一个参数,或者更确切地说,是一个mime类型的application/x-www-form-urlencoded的查询字符串。
由于历史原因,在这种mime类型的上下文中,+-sign除了其编码百分比的对应%20之外,还被解释为空间。维基百科有话要说
应用程序/x-www格式-urlencoded类型
..。默认情况下使用的编码基于通用URI百分比编码规则的早期版本,并进行了一些修改,如换行符规范化和用+替换空格(而不是%20 )。
因此,您需要确保为parse_str()提供一个正确的URL编码字符串,以获得您期望的字符。如果您期望一个+,那么它首先应该正确地编码为%2B,然后再传递给parse_str()。
发布于 2017-12-04 03:41:17
这是因为parse_str用于查询字符串,并且每当字符串中有空格时,它就转换为+,因此parse_str将+转换为空间。
您可以通过str_replace传递此字符串以撤消此操作。
"a=123&b=456&Signature=aaaa/bbb+i8=&Satus=bbbb";$string = parse_str( $old_string );$new_string = str_replace('+',‘',$string);
如果你面临任何问题,那就让我知道
发布于 2017-12-04 03:41:46
你应该详细说明你给出的代码用途是什么。它是用于HTTP请求(比如curl post方法)还是请求URL GET方法。
如果它是一个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
https://stackoverflow.com/questions/47626102
复制相似问题