首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >parse_str将加号(+)转换为空格

parse_str将加号(+)转换为空格
EN

Stack Overflow用户
提问于 2017-12-04 03:29:49
回答 4查看 2.1K关注 0票数 2

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

代码语言:javascript
运行
复制
$str='a=123&b=456&Signature=aaaa/bbb+i8=&Satus=bbbb';

我注意到函数parse_str确实将加号转换为空间,但是如何避免这种情况。

新编辑:

从字符串中获得的值的$str,如下所示:

代码语言:javascript
运行
复制
YT0xMjMmYj00NTYmU2lnbmF0dXJlPWFhYWEvYmJiK2k4PSZTYXR1cz1iYmJi

我得到字符串并使base64_decode,然后得到$str

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 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()

票数 3
EN

Stack Overflow用户

发布于 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);

如果你面临任何问题,那就让我知道

票数 0
EN

Stack Overflow用户

发布于 2017-12-04 03:41:46

你应该详细说明你给出的代码用途是什么。它是用于HTTP请求(比如curl post方法)还是请求URL GET方法。

如果它是一个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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47626102

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档