Ajax中文传参出现乱码
Ajax技术的核心为Javascript,而javascript使用的是UTF-8编码,因此在页面采用GBK或者其他编码,同时没有进行编码转换时,就会出现中文乱码的问题。
以下是分别使用GET和POST方式传值,并且页面采用GBK和UTF-8编码在IE和FF下的不同测试结果和出现乱码时的解决方案。
| 传值方式 | 客户端编码 | 服务器端编码 | IE | FF | 解决方案 |
| GET | UTF-8 | UTF-8 | 接收$_GET传递的参数时出现乱码 | 正常 | 客户端url=encodeURI(url) |
| GET | GBK | GBK | 正常 | 接收$_GET传递的参数时出现乱码 | 客户端url=encodeURI(url) 服务器端 $str=iconv("UTF-8","GBK",$str) |
| POST | UTF-8 | UTF-8 | 接收$_GET传递的参数时出现乱码 | 正常 | 客户端url=encodeURI(url) |
| POST | UTF-8 | UTF-8 | 接收$_POST传递的参数时正常 | 接收$_POST传递的参数时正常 | 推荐采用方式 |
| POST | GBK | GBK | 正常 | 接收$_GET传递的参数时出现乱码 | 客户端url=encodeURI(url) 服务器端 $str=iconv("UTF-8","GBK",$str) |
| POST | GBK | GBK | 接收$_POST传递的参数时出现乱码 | 接收$_POST传递的参数时出现乱码 | 服务器端 $str=iconv("UTF-8","GBK",$str) |
另在IE中可能存在这样一个问题:由于出现错误c00ce56e而导致此项操作无法完成。
此时设置编码时将header('Content-Type:text/html;charset=utf8')改为header('Content-Type:text/html;charset=utf-8')即可。
开发中所遇实例:
通过Jquery的$.get()方法传中文参数,后台接收,页面编码未设置,FireFox下正常,IE下乱码
var name = "中国";
var url = "/Movies/GetMovieName?name=" + name;
$.get(url,{}, function () {}, "json");
解决方法:
[1]Js请求时进行二次编码:url=encodeURI(url); url=encodeURI(url); //即url=encodeURI(encodeURI(url));
var name = encodeURI(encodeURI("中国"));
var url = "/Movies/GetMovieName?name=" + name;
$.get(url,{}, function () {}, "json")
[2]解码
(1)C#后台解码:
public void GetMovieName(string name)
{
//HttpUtility.UrlDecode 方法
name = System.Web.HttpUtility.UrlDecode(name);
//Server.UrlDecode 方法
name = Server.UrlDecode(name);
}
(2)JS解码:decodeURI(url);
注:JS、C#编码解码如下:
escape不编码字符有69个:*,+,-,.,/,@,_,0-9,a-z,A-Z
encodeURI不编码字符有82个:!,#,$,&,',(,),*,+,,,-,.,/,:,;,=,?,@,_,~,0-9,a-z,A-Z
encodeURIComponent不编码字符有71个:!, ',(,),*,-,.,_,~,0-9,a-z,A-Z
[1]、JS: escape(name) :
js使用数据时可以使用escape。
例如:搜藏中history纪录。
0-255以外的unicode值进行编码时输出%u****格式,其它情况下escape,encodeURI,encodeURIComponent编码结果相同。
(1)JS解码:unescape(name);
(2)C#:HttpUtility.UrlEncode() HttpUtility.UrlDecode();
[2]、JS: encodeURI():
进行url跳转时可以整体使用encodeURI()
例如:Location.href=encodeURI("http://cang.baidu.com/do/s?word=百度&ct=21");
(1)JS解码:decodeURI();
(2)C#解码: decodeURIComponent();
[3]、JS: encodeURIComponent():
传递参数时需要使用encodeURIComponent,这样组合的url才不会被#等特殊字符截断。
例如:<script language="javascript">document.write('<a href="http://passport.baidu.com/?logout&aid=7& u='+encodeURIComponent("http://cang.baidu.com/bruce42")+'">退出</a& gt;');</script>
(1)解码使用decodeURIComponent(u);
(2)C#:[HttpContext.Current.]Server.UrlDecode(url) [HttpContext.Current.]Server.UrlEncode(url);
Ajax中文传参出现乱码的更多相关文章
- C# JS URL 中文传参出现乱码的解决方法
在传参是先编码在传输,接受时先编码,在接收. string mm=Server.URLEncode(你); Response.Redirect(index.aspx?mm=+mm); 然后在接收页解码 ...
- web前端页面解决中文传参乱码问题
问题背景:在项目中往往会涉及到前端跳转页面时要传一些参数给下一个页面,如果参数是英文或者数字的时候就很好解决,然而有时候传参会涉及到中文汉字,这个时候再单纯的拼接往往就会导致中文乱码,下面我们就该讨论 ...
- 在浏览器上直接输入url 时,中文传参乱码问题
这样的地址 xxx.asp?name=中国 ,通过 超链接打开这个链接 ,xxx.asp能够成才接收参数,但是如果将地址直接放到浏览器地址栏上,回车, xxx.asp就无法正确接收中文参数,一直显示 ...
- IE浏览器URL中文传参,后端接收是乱码问题处理
这个问题还是因为IE浏览器是国外产品,人家交流的主要语言是英语,中文不识别. 直接上代码,亲测无误. //判断是否是IE浏览器 function isIE() { var userAgent = na ...
- pager-taglib2.0中文传参乱码问题
1.重现问题 在web项目中有时会用到pager-taglib来作为分页的标签,如上图红色框标识所示,当我们需要把页面参数保持的时候我们会在<pg:param />标签中把参数进行传递. ...
- js URL中文传参乱码
js: var searchVal = encodeURIComponent($.trim($('#js_search_val').val()));//搜索的值 encodeURIComponent( ...
- tomcat URI get 参数中文传到后台 乱码 URIEncoding
* 修改tomcat server.xml 找到这一行 <Connector connectionTimeout="20000" port="80" pr ...
- Java中常用的解决乱码的几种方法
乱码有时候是一个非常让人头疼的问题,这里就总结一下常用的解决乱码的方法. 只知道的用法,却不明白为什么这么用…… 一. 在Java代码中: request.setCharacterEncoding(& ...
- 解决Ajax前台中文传到后台出现中文乱码
遇到的问题是: 前台利用Ajax, get方式向后台发送中文数据出现乱码. 解决办法是前台两次编码, 后台一次解码即可. 前台jsp文件 1 var text = "张三"; 3 ...
随机推荐
- 20172333 2017-2018-2 《Java程序设计》第6周学习总结
20172333 2017-2018-2 <Java程序设计>第6周学习总结 教材学习内容 1.数组的基本用法,如数组的定义:int[该数组类型] name = new int[X]X为数 ...
- 2016 UESTC Training for Data Structures 题解
题解在下已经写过一次了,所以就不再写了,下面只有代码 题解下载(1):http://pan.baidu.com/s/1hsAUjMs 题解下载(2):http://pan.baidu.com/s/1m ...
- Lucene_索引(域)的查询
package cn.tz.lucene; import java.io.File; import org.apache.lucene.analysis.Analyzer; import org.ap ...
- Apache 如何反向代理tomcat并且实现Session保持
简介 LAMT=Linux+Apache+MySQL+Tomcat: Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器: 在中小型系统和并发访问用户不是很多的场合下 ...
- c++ 常见网络协议头
//NTP协议 typedef struct _NTP_HEADER { uint8_t _flags;//Flags 0xdb uint8_t _pcs;//Peer Clock Stratum u ...
- 探秘GO语言《比较C#与GO的性能》
这段时间也来学学GO语言,听说它的性能相当的棒棒,我就拿C#来和它做比对一下. 这里只是单纯了做了for循环的比对,看看谁的循环快 C# 代码: static void Main(string[] a ...
- Tomcat篇
安装tomcat 先从tomcat官网找到最新的版本下载地址,我找的是Core下的安装包,下载到本地: wget http://mirror.bit.edu.cn/apache/tomcat/tomc ...
- iOS 下 Podfile 使用方法
配置 Podlist Pod 是 iOS 下包管理工具,类似于 JavaScript 里的 npm 或 yarn. 创建 Podfile 创建 Podfile 有两种方式: 打开 Terminal,在 ...
- Access control configuration prevents your request from being allo
我发现在在XP环境下我输入网易的220.181.28.42也找不到网页,就跟在LINUX下一样 都揭示: 错误 您所请求的网址(URL)无法获取 --------------------------- ...
- Endianess(字节次序)简介
1. 基础 在解释Endianess前,需要先明白几个基础定义 1) 数据的高位与低位是什么 以1001001为例,则从左边算起是 高位 -> 低位, 简而言之就是左边是高位,右边是低位 而内存 ...