① ajax如何传中文参数乱码解决办法
由于某种原因ajax默认就是uft-8的编码,那么我们使用一gbk就容易出现乱码的问题,下面我们就来告诉你php教程ajax乱码的解决方法吧。
传递中文参数,然后修改数据库教程的。
<script
var url=admin/ajaxmodify.php?+key+=;
url+=encodeuricomponent(encodeuricomponent(value));
xmlhttp.open(get,url,true);
xmlhttp.send(null);
</script
参数是中文encodeuricomponent这个方法必须调用两次*/function utf8rawurldecode ($source) {
$decodedstr = ;$pos = 0;
$len = strlen ($source);
while ($pos < $len) {
$charat = substr ($source, $pos, 1);
if ($charat == '%') {$pos++;
$charat = substr ($source, $pos, 1);
if ($charat == 'u') {
// we got a unicode character$pos++;
$unicodehexval = substr ($source, $pos, 4);
$unicode = hexdec ($unicodehexval);
$entity = &#. $unicode . ';';
$decodedstr .= utf8_encode ($entity);$pos += 4;}else {
// we have an escaped ascii character
$hexval = substr ($source, $pos, 2);
$decodedstr .= chr (hexdec ($hexval));$pos += 2;}} else {
$decodedstr .= $charat;$pos++;}}
return $decodedstr;}/*
注:js中,在使用字符转码的时候,推荐使用 encodeuricomponent() 或者 encodeuri(),而非escape()。
② java中ajax接收返回数据是乱码,怎么办不要告诉我配置什么response。setEoncling等的
在页面用EncodeURI()加密之后,在java里用URIDecoder.decode("字符集",“传回来的字符串”);
如果你用的服务器是tomcat的话,就用回在tomcat的server.xml里的connector标签里答加上
URIEncoding="utf-8"属性
<Connector URIEncoding="utf-8" port="8009" protocol="AJP/1.3" redirectPort="8443"/>
③ ajax传参为中文,乱码问题,求救!!
。。。请这样写吧。
data: { men: escape(selectValue) },//传参为中文,这步是把selectValue 值传给men
escape是浏览器转译方法内。用此方法,对安容全性及数据一致性有很大的作用。
同理,有逆方法unescape。
unescape一般用于ajax在html页面接收json字符串时的转译及显示。
希望对你有帮助。
④ ajax $.post传值中文乱码!
方法一
在后台中使用request.setCharacterEncoding("UTF-8");
方法二
$.ajax({
type:'post',
......
contentType:'application/x-www-form-urlencoded; charset=UTF-8'
});
方法三(此方法绝对可行)
前台版js将参数值转为统一资权源标示符(URI)例如name = encodeURI(encodeURI(‘张三'));注意要
encodeURI两次。
后台需要对URI进行解析
String name= request.getParameter(“name”);
name= URLDecoder.decode(name, “UTF-8″);
⑤ 为什么利用AJAX传回来的值是乱码
这是由于客户端请求与服务器端相应编码不一致。
1.在你的页面上,你需要指定页面的编码,如:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
2.在你的服务器端也要指定输出编码,如:
response.charset = "utf-8";
3.你的前端页面和后台处理的页面字符编码必须同样为utf-8。
这样一般就不会乱码了,如果还乱,那么你就用escape()将请求进行编码后再发送,而后台也使用unescape()将请求进行解码后再处理就可以了。
输出时候的中文呢?在Action里面。
如果是html页面:
response.setContentType("text/html") ;
response.setCharacterEncoding("utf8") ;//这句会对输出字符进行设置
如果是xml,把text/html改成text/xml就OK了!
注:个人认为
response.setContentType("text/html; charset=UTF-8");
这方法不太保险,ContentType属性是针对页面的,如果是在当前页面输出就可以。但跳转或者传输数据的话会出问题!
⑥ Ajax中用URL传值,乱码怎么解决
解决方法:
方法一:提交前采用encodeURI两次编码,记住一定是两次
1.修改以下代码
复制代码代码如下:
data:{id:1, type:encodeURI(encodeURI(‘商品版'))}
2.在后台权action里要对取得的字符串进行decode
1、String type = request.getParameter(“type”);
2、type = URLDecoder.decode(type, “UTF-8″);
方法二:ajax配置contentType属性,加上charset=UTF-8
在ajax方法中加入以下参数
contentType: “application/x-www-form-urlencoded; charset=UTF-8″使用其它js框架或者xhr都是差不多,设置header中contentType即可,
这里关键是charset=UTF-8,如果没有这个,是不行的,默认jQuery里的contentType是没有的
⑦ java中乱码 ajax 传入后台是没事,但是经转码后“+”显示不出来是怎么回事
现在js编码再到java解码。
解决办法:
1、将字符放到form中,然后内用js提交form表单到服务器。容
2、将字符中的特殊字符替换成十六进制的字符,一些特殊字符与十六进制的对应关系:
+ 空格 / ? % & = #
%2B %20 %2F %3F %25 %26 &3D %23
str = str.replace(/\+/g,"%2B"); 将+号替换为十六进制
3、最简单的一种,使用encodeURIComponent()函数。
该方法不会对 ASCII 字母和数字进行编码,也不会对这些 ASCII 标点符号进行编码: - _ . ! ~ * ' ( )
⑧ java/js/html/ajax 使用ajax请求,中文乱码~~
url=encodeURI(encodeURI(url));前台转码一次,java.net.URLDecoder.decode(paperTitle,"UTF-8");后台也转码下,试试。
⑨ Ajax传递中文参数到后台乱码的有效解决方法
使用Ajax传递中文参数,如果不对参数进行处理的话,传到后台会变成乱内码,经测试容可以使用如下方法
这里是以jquery.autocomplete插件中获取输入框中的数据传到后台为例:
注意要对中文使用encodeURI编码两次
复制代码
代码如下:
extraParams:
{q:function(){return
encodeURI(encodeURI($('#keyword').val()))}}
这里同样也要解码两次
复制代码
代码如下:
String
key
=
URLDecoder.decode(URLDecoder.decode(q,"UTF-8"),"tuf-8");
⑩ URL传递中文、Ajax传递中文,Java如何编码如何解决乱码
地址栏中出现汉字的情况有两种,一种是汉字出现在URL的路径部分,一种是汉字出现在URL的传参的部分,第二种情况的时候必须采用编码后传参,接受时解码的方式完成传参。js中编码有escape(),encodeURI(),encodeURIComponent()三个常用的方法,escape()常常用在提交页面和处理页面的编码格式相同的情况下(比如它们都是GB2312),encodeURI()和encodeURIComponent()的用法基本相同,区别在于encodeURIComponent()也对"?"等特殊字符进行编码。
一开始遇到中文参数的时候,使用encodeURI()进行了一遍编码,传过去后,发现解码出现问题,于是想到可能是编码方法使用错误,于是使用escape()方法,这时发现解码时抛出isHexDigit异常。借助网络搜索isHexDigit异常,
发现原来,是escape()方法造成了异常,同时了解了浏览器传递地址的一些原理,在浏览器地址栏里,浏览器认为%是个转义字符,浏览器会把%与%之间的编码,两位两位取出后进行解码,然后再传递给处理页面,
然后由处理页面进行再次解码。由此我想到一直使用encodeURI方法是正确的,只是需要使用两次encodeURI方法,例如encodeURI(encodeURI("中文"));第一次是把中文编码成%xy的格式,
第二次是对%xy中的%进行编码,%编码成%25。整个传参过程大体应该是:提交页面使用encodeURI(encodeURI("中文"))编码,把最后的编码结果%25xy传递给处理页面的过程中,浏览器获取URL地址
(注意openModelDialog方法,浏览器获取不到参数编码)后解码成%xy,然后把%xy传递给处理页面,处理页面使用URLDecoder.decode(request.getParameter("参数名"),"UTF-8");完成解码。
总结:1、汉字出现在URL路径部分的时候不需要编码解码;
2、使用encodeURI进行2次编码;
3、在openModelDialog()打开的模式窗体里没办法用request.getParameter正确获取参数;
客户端和服务器在传递数据时可以用过滤器filter解决字符编码问题,但filter只能解决post方式提交的数据。对于get方式,可以使用两次encodeURI(encodeURI(中文))并在服务器中使用URLDecoder.decode(中文, "UTF-8");
今天用Ajax校验数据时也遇到这个问题,尽管页面、类和web容器都统一了字符编码,提交的数据依然是乱码,所以就采用了2次encodeURI()编码方式,乱码问题就解决了。