加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 黄冈站长网 (http://www.0713zz.com/)- 数据应用、建站、人体识别、智能机器人、语音技术!
当前位置: 首页 > 教程 > 正文

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

发布时间:2021-03-30 12:46:37 所属栏目:教程 来源:网络整理
导读:uchome中有一个方便的ajaxget函数,用于向某段php代码传递若干个值进行处理,然后将得到的结果显示到指定的html元素中。 类似: ajaxget(‘custom.php?op=getinfocountryname=’ + countryname,‘tdprovinces’); 第一个参数(蓝色)是表示进行后台处理的u

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操作后一切正常。 百思不得其解!

(编辑:PHP编程网 - 黄冈站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读