加载中 ...
首页 > 新闻资讯 > 软件定制 正文

jQuery ajax在GBK编码下表单提交终极解决方法

2019-03-25 10:24:18 来源:沈阳软件公司 作者:沈阳软件开发

  如果还在打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个:!,%20',(,),*,-,.,_,~,0-9,a-z,A-Z

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

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

  jQuery.param=function(%20a%20)%20{

  var%20s%20=%20[%20];

  var%20encode=function(stOA系统

r){

  str=escape(str);

  str=str.replace(/+/g,"%u002B");

  return str;

  };

  function add( key, value ){

  s[ s.length ] = encode(key) + '=' + encode(value);

  };

  // If an array was passed in, assume that it is an array

  // of form elements

  if ( jQuery.isArray(a) || a.jquery )

  // Serialize the form elements

  jQuery.each( a, function(){

  add( this.name, this.value );

  });

  // Otherwise, assume that it's an object of key/value pairs

  else

  // Serialize the key/values

  for ( var j in a )

  // If the value is an array then the key names need to be repeated

  if ( jQuery.isArray(a[j]) )

  jQuery.each( a[j], function(){

  add( j, this );

  });

  else

  add( j, jQuery.isFunction(a[j]) ? a[j]() : a[j] );

  // Return the resulting serialization

  return s.join("&").replace(/%20/g, "+");

  }

  上面那段代码并不需要在jquery的源文件重写,可以在你项目的javascript贴上,覆盖它原有的方法,不过必须在jquery加载之后。

  经初步验证,上面那段代码在utf-8编码也可以工作正常,大概是编码成unicode的缘故吧。

“沈阳软件公司”的新闻页面文章、图片、音频、视频等稿件均为自媒体人、第三方机构发布或转载。如稿件涉及版权等问题,请与

我们联系删除或处理,客服QQ:55506560,稿件内容仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同

其观点或证实其内容的真实性。