http_build_query函数带来的困扰

http_build_query是用来生成URL请求字符串的函数,很简单.不过今天却出现了一点小意外,在本机安装公司社区时,出现了无法登录的情况.但在测试服务器正常.经过地毯式排错,找到问题代码(仅演示,屏蔽敏感内容):
[coolcode lang=”php”]
$Args = array(
“usr” => “touchboy”,
“pwd” => “123456”,
“ip” => “127.0.0.1”,
“src” => “account”
);
$query= http_build_query( $Args );

[/coolcode]

测试服务器得到结果为:
usr=touchboy&pwd=123456&ip=127.0.0.1&src=account
而我本地结果为:
usr=touchboy&pwd=123456&ip=127.0.0.1&src=account
中间的连接符出现了差异,服务器为正常的”&”,而我本地却是转义后的”&”,最终导致本地提交数据错误.
查看手中的PHP手册,http_build_query一节对此问题只字未提.所以想到的补救方法就只有用htmlspecialchars_decode($query)还原连接符.不过始终觉得可疑,为什么两台机子结果不一样.开始怀疑是linux(服务器)和windows(本机)的差异,但经过对另一台windows机子的测试,结果正常.后就怀疑是环境配置的问题,经过一番google,果然真相大白.问题元凶在php.ini配置中一行:
[coolcode lang=”php”]arg_separator.output = “&”[/coolcode]
将arg_separator.output定义为”&”,重启apache,问题解决!
顺带说下PHP手册的问题,因我用的手册是之前比较经典的《PHP5中文手册文档版》(2006-11-05编译),2年半以前的东东,内容应该停留在PHP 5.1.0的阶段.很多内容已经滞后了.之后下载了陈浩(Haohappy)的《PHP中文手册》(2009-02-15编译),查看http_build_query一节,发现里面出现一行相关提示:
[coolcode lang=”php”]
Note: 用 arg_separator.output 来分隔参数。 [/coolcode]
到官方查看最新手册,发现里面有更详尽阐述,说明在5.1.2版增加了$arg_separator 参数可以解决此问题.看来中文的手册滞后还是很严重,5.1.2应该是一年前发布的,而2009-02-15编译的最新中文手册仍未收录相关内容.
简而言之,遇到PHP函数故障,节省时间的最好解决方法:
1.第一时间到PHP官方查找答案.
2.保证自己手中的PHP手册是最新的.

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据