Discuz   发布时间:2022-05-06  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了uchome的ajaxget函数传递中文值的问题及解决大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

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函数传递中文值的问题及解决所遇到的程序开发问题。

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

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: