uchome的ajaxget函数传递中文值的问题及解决

uchome的ajaxget函数传递中文值的问题及解决,第1张

概述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函数,用于向某段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函数传递中文值的问题及解决所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/1001788.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存