• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >jquery > jQuery ajax在GBK编码下表单提交终极解决方案(非二次编码方法)

jQuery ajax在GBK编码下表单提交终极解决方案(非二次编码方法)

作者: 字体:[增加 减小] 来源:互联网 时间:2017-08-16

通过本文主要向大家介绍了ajax,表单提交等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
前言:
当jquery ajax在utf-8编码下(页面utf-8,接收utf-8),无任何问题。可以正常post、get,处理页面直接获取正确的内容。
但在以下情况下:
GBK -> AJAX POST ->GBK
UTF-8 -> AJAX POST ->GBK
后台代码无法获取正确的内容,通常表现为获取到奇怪字符、问号。
经典解决方法:
1:发送页面、接收页面均采用UTF-8编码。
2:发送页面在调用ajax post方法之前,将含有中文内容的input用encodeURIComponent编码一次,而接收页面则调用解码方法( 如:java.net.urldecoder.decode("接收到内容","utf-8") )。

其中,第一种方法无疑是最简单、最直接,但往往不符合实际,因为很多项目并不是使用utf-8编码,例如国内大部分使用gbk编码,也不可能为了解决这样一个问题,而将整个项目转换为utf-8编码,成本太大,风险太高。
第二方法,是现在最多人使用的方法,俗称二次编码,为什么叫二次编码,等下会解释。客户端编码两次,服务端解码两次。但这种方法不好的地方,就是前台手动编码一次,后台再手动解码一次,稍不留神就会忘记,而且代码掺和前台逻辑。
交互过程:
当我们使用表单按照传统方式post提交时候(非AJAX提交),浏览器会根据当前页面编码,encode一次,然后发送到服务端,服务端接收到表单,会自动dencode一次,通常这个过程是对程序是透明的,因此加上手动编码、解码,就变成上面所说的二次编码。
但当我们使用AJAX方式提交时候,浏览器并不会自动替我们encode,因此在jquery中有这样的一段代码:

解决方法:

encodeURIComponent会以utf-8编码,在gbk编码下,可不可以以gbk进行编码呢?

如果还在打encodeURIComponent主意的话,那不好意思,encodeURIComponent只会utf-8编码,并没有其他api进行其他编码;不过,别担心,看看下面:

encodeURIComponent,它是将中文、韩文等特殊字符转换成utf-8格式的url编码。

escape对0-255以外的unicode值进行编码时输出%u****格式,其它情况下escape,encodeURI,encodeURIComponent编码结果相同。

哈哈,看到希望吧?没错,就是用escape代替encodeURIComponent方法,不过必须注意:

escape不编码字符有69个:*,+,-,.,/,@,_,0-9,a-z,A-Z

encodeURIComponent不编码字符有71个:!, ',(,),*,-,.,_,~,0-9,a-z,A-Z

使用了escape之后必须对加号进行编码,否则,当内容含有加号时候会被服务端翻译为空格。

终于知道解决办法了,重写jquery代码:

有兴趣的可以到http://www.open-lib.com/Forum/Read_69_1.action与作者交流。
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 基于Jquery Ajax type的4种类型(详解)
  • jQuery.Ajax()的data参数类型详解
  • jQuery之动画ajax事件(实例讲解)
  • 详解jQuery中关于Ajax的几个常用的函数
  • 用户管理的设计_jquery的ajax实现二级联动效果
  • jQuery+Ajax请求本地数据加载商品列表页并跳转详情页的实现方法
  • 浅谈jQuery框架Ajax常用选项
  • jQuery+ajax实现修改密码验证功能实例详解
  • jQuery使用ajax_动力节点Java学院整理
  • 关于jQuery.ajax()的jsonp碰上post详解

相关文章

  • 2017-08-16jquery左边浮动到一定位置时显示返回顶部按钮
  • 2017-08-16让网页跳转到指定位置的jquery代码非书签
  • 2017-08-16jQuery表单验证插件formValidator(改进版)
  • 2017-08-16jQuery代码实现表格中点击相应行变色功能
  • 2017-08-16JQuery+EasyUI轻松实现步骤条效果
  • 2017-08-16jQuery过滤选择器:not()方法使用介绍
  • 2017-08-16Jquery1.9.1源码分析系列(十五)动画处理之外篇
  • 2017-08-16完美解决jQuery符号$与其他javascript 库、框架冲突的问题
  • 2017-08-16初窥JQuery(一)jquery选择符 必备知识点
  • 2017-08-16Spring shiro + bootstrap + jquery.validate 实现登录、注册功能

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • jquery ajax执行后台方法
    • jquery 学习之二 属性(html()与html(val))
    • 基于jQuery的ajax方法封装
    • jQuery给元素添加样式的方法详解
    • 通过jQuery源码学习javascript(一)
    • jQuery ztree实现动态树形多选菜单
    • 结构/表现/行为完全分离的选项卡(jquery版和原生JS版)
    • jQuery插件HighCharts绘制2D圆环图效果示例【附demo源码下载】
    • jquery实现点击弹出带标题栏的弹出层(从右上角飞入)效果
    • Jquery 实现table样式的设定

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有