当前位置: 首页 > news >正文

AJAX中文乱码PHP完美解决(IE和Firefox兼容)

最近在做一个项目,遇到AJAX中文乱码问题,经过一个下午的努力终于完美解决,现将心得写下来,希望对那些还困绕在这个问题而头痛不已的人们有所帮助。

众所周知,使用AJAX传送和接收中文参数时,如果不在客户端和服务器做相应的处理就会出现乱码问题,在网上相应的文章也不少,但是有的情况下很难从中找 到符合自己理想的答案,我今天就是在网上找了很多,但是都差不多,讲ASP和JSP的比较多(我是用的PHP),所以到最后都没找到自己满意的答案。

AJAX的中文乱码可以大概分为两中,第一种是向服务器端发送中文参数时(xmlhttp.open(“get|post”,url,true)),服务 器端接收到的为乱码,这个也是我今天遇到的问题,没做处理之前,在IE里是正常的,但是在Firefox里面就出现了乱码,我先把接收到参数输出到一个文 本里,没有发现什么问题,郁闷了,然后我就把查询语句在输出来观察(我这里是要从数据库里查出与参数相关的东西),终于发现问题,IE和Firefox输 出的参数不一样,虽然汉字上都一样,但是和前后连接上有细小的区别,于是认定了是编码问题,在网上查找了相关资料,都没能解决问题,但是得到一些启示,因 为AJAX发送数据都是采用UTF-8编码的方式发送的,所以要在服务器端进行编码转换(我这里页面是采用GB2312编码的,如果是采用UTF-8的话 应该不会有这步的问题),所以我在服务器端进行了UTF-8转GB2312,$str=iconv(“UTF-8″,”GB2312″,$str);

然后测试,在Firefox上顺利解决了问题,以为大公告成了,可是再到IE下测试,发现IE又出现了问题,服务器端接收到的参数没值,这下就郁闷了,突 然看到发送头设置了setRequestHeader(“Content-Type”,”application/x-www-form- urlencoded”);,就找到问题所在了,然后就在发送那里进行了参数编码:

geturl=encodeURI(geturl);
geturl=encodeURI(geturl); //两次也可以写成geturl=encodeURI(encodeURI(geturl));
xmlhttp.open(“GET”,geturl,true);

然后再到服务器端进行URL解码:

$str=urldecode($str); //解码
$ str =iconv(“UTF-8″,”GB2312″,$ str); //编码转换

注意:解码必须在编码转换前面,不然得不到正确值
保存测试,IE和Firefox都能正常了。

第二种就是服务器端向客户端输出中文时出现乱码,这类问题网上的答案就比较多了,也都能解决,为了避免各位再去查找,我在这里就COPY下J

原因:AJAX在接收responseText或responseXML的值的时候是按照UTF-8的格式来解码的,如果服务器段发送的数据不是UTF-8的格式,那么接收responseText或responseXML的值有可能为乱码。

解决办法:
在服务器指定发送数据的格式:
在jsp文件中:
response.setContentType(“text/text;charset=UTF-8″);//返回的是txt文本文件
或是
response.setContentType(“text/xml;charset=UTF-8″);//返回的xml文件
PHP:header(‘Content-Type:text/html;charset=GB2312′);
ASP:Response.Charset(“GB2312″)
JSP:response.setHeader(“Charset”,”GB2312″);


本文转自网络

转载于:https://www.cnblogs.com/imxiu/p/3496989.html

相关文章:

  • querySelector 和 querySelectorAll区别
  • 关于URI URL URN
  • 熊先生做原型之:简单、粗暴、有效
  • 解决苹果os 10.9 和 parallels desktop 8 兼容问题
  • 揭开JVM所看到的try/catch/finally
  • debian useful packages
  • 图形绘制-线段绘制相关
  • wget 命令用法详解
  • 介绍一个基于jQuery的Cookie操作插件
  • 并查集的应用
  • 37条常用Linux Shell命令组合
  • 运维小技巧:使用ss命令代替 netstat,和netstat说再见
  • 弹出框插件——dialog
  • 小强的HTML5移动开发之路(21)—— PhoneGap
  • dba基础课程-linux操作系统:系统信息命令
  • 2017年终总结、随想
  • Apache的基本使用
  • chrome扩展demo1-小时钟
  • css布局,左右固定中间自适应实现
  • Mysql5.6主从复制
  • oschina
  • pdf文件如何在线转换为jpg图片
  • React-Native - 收藏集 - 掘金
  • Redis提升并发能力 | 从0开始构建SpringCloud微服务(2)
  • tensorflow学习笔记3——MNIST应用篇
  • vue-cli在webpack的配置文件探究
  • vue从创建到完整的饿了么(18)购物车详细信息的展示与删除
  • webpack入门学习手记(二)
  • 从setTimeout-setInterval看JS线程
  • 深入浅出Node.js
  • 实战:基于Spring Boot快速开发RESTful风格API接口
  • 小程序01:wepy框架整合iview webapp UI
  • 延迟脚本的方式
  • 移动端 h5开发相关内容总结(三)
  • 源码安装memcached和php memcache扩展
  • 【云吞铺子】性能抖动剖析(二)
  • ionic异常记录
  • 格斗健身潮牌24KiCK获近千万Pre-A轮融资,用户留存高达9个月 ...
  • 新海诚画集[秒速5センチメートル:樱花抄·春]
  • ​Spring Boot 分片上传文件
  • ​人工智能书单(数学基础篇)
  • #我与Java虚拟机的故事#连载01:人在JVM,身不由己
  • $.ajax()
  • $.ajax中的eval及dataType
  • (4.10~4.16)
  • (5)STL算法之复制
  • (草履虫都可以看懂的)PyQt子窗口向主窗口传递参数,主窗口接收子窗口信号、参数。
  • (分布式缓存)Redis哨兵
  • (剑指Offer)面试题34:丑数
  • (三)Honghu Cloud云架构一定时调度平台
  • (顺序)容器的好伴侣 --- 容器适配器
  • (五)IO流之ByteArrayInput/OutputStream
  • (转)Sql Server 保留几位小数的两种做法
  • .htaccess配置重写url引擎
  • .NET 4 并行(多核)“.NET研究”编程系列之二 从Task开始