uchome中有一个方便的AJAXget函数,用于向某段PHP代码传递若干个值进行处理,然后将得到的结果显示到指定的HTML元素中。 类似:
AJAXget(‘custom.PHP?op=getinfo&countryname=’ + countryname,‘tdprovinces’);
第一个参数(蓝色)是表示进行后台处理的URL地址,第二个参数(红色)表示将处理返回结果显示到ID=tdprovinces的元素中去(我这里是一个单元格)。
环境: MysqL 5.x.xx gbk 浏览器 firefox 3.5
现象是:当counrtryname的值是数字或者英文的时候,能够正常返回结果并显示到中去,但是一旦counrtryname的值为中文的时候,PHP运行没有报错,没有返回任何字符串。
首先排查是否代码错误(因为AJAXget这里如果代码错误是看不到报错的,只表现为无返回结果),于是单独提出这段查询代码运行(新写一个PHP 文件,手工给定变量的值$provincename = ‘北京’),运行能够得到结果,说明代码无错,是AJAX传输过程中的字符编码问题。
先看看传递过来后变成什么样子了吧,于是在PHP页面里测试输出$_GET['countryname'],发现是一段%6E%…..类似的,汗(IE应该会显示一段utf-8版的乱码)
明白了,应该是SQL语句中的 cname = {$countryname}这里,因为$countryname不是一个合法的gbk字符串(MysqL能识别的GBK格式——’北京’),所以导致查找不到任何记录。
查资料,提示是需要将url进行编码,于是改成 AJAXget(encodeURI(encodeURI(’tigtag_custom.PHP?op=getschools&provincename=’ + provincename)),‘tdschools’);
这次还是不行,测试输出仍然是一段代码“%5E%xxxxxx”,甚至用escape也不行,估计AJAXget函数已经把这个 *** 作封装了。再进行一次是多此一举。
汗,最后想到,是不是需要在PHP代码里用iconv将AJAX传递过来的字符串转换成gbk的呢?因为AJAX好像默认是传递utf-8格式的。
好,加上一段 $provincename = iconv(”UTF-8″,”GBK”,$provincename); 试试看,强制地UTF-8转GBK
再次输出$provincename测试,已经是正常的汉字“北京”了。
同时MysqL也能认出来并正常查询了,查询结果显示也没问题。
解决。看来AJAX的编码的问题,要从几个地方考虑啊,1.来源地 2.url是否需要转码 3.数据库的编码 4……
==================================== 最新补充: 我本地的测试环境是 WAMP;需要进行iconv,而在linux服务器下,反而无法输出$provincename,取消iconv *** 作后一切正常。 百思不得其解!
总结以上是内存溢出为你收集整理的uchome的ajaxget函数传递中文值的问题及解决全部内容,希望文章能够帮你解决uchome的ajaxget函数传递中文值的问题及解决所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)