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手册是最新的.
以上就介绍了http_build_query函数带来的困扰,包括了方面的内容,希望对php教程有兴趣的朋友有所帮助。