惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Cisco Talos Blog
Cisco Talos Blog
阮一峰的网络日志
阮一峰的网络日志
云风的 BLOG
云风的 BLOG
D
Docker
Vercel News
Vercel News
IT之家
IT之家
Recent Announcements
Recent Announcements
Last Week in AI
Last Week in AI
V
Visual Studio Blog
Engineering at Meta
Engineering at Meta
腾讯CDC
Google DeepMind News
Google DeepMind News
I
InfoQ
博客园 - 三生石上(FineUI控件)
Apple Machine Learning Research
Apple Machine Learning Research
The GitHub Blog
The GitHub Blog
博客园 - Franky
The Cloudflare Blog
A
About on SuperTechFans
有赞技术团队
有赞技术团队
Y
Y Combinator Blog
T
Tenable Blog
P
Proofpoint News Feed
Recorded Future
Recorded Future
Security Latest
Security Latest
H
Hackread – Cybersecurity News, Data Breaches, AI and More
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
博客园 - 聂微东
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Google Online Security Blog
Google Online Security Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Simon Willison's Weblog
Simon Willison's Weblog
The Last Watchdog
The Last Watchdog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
N
News and Events Feed by Topic
TaoSecurity Blog
TaoSecurity Blog
U
Unit 42
The Hacker News
The Hacker News
Martin Fowler
Martin Fowler
T
Threat Research - Cisco Blogs
NISL@THU
NISL@THU
F
Full Disclosure
M
MIT News - Artificial intelligence
人人都是产品经理
人人都是产品经理
Hugging Face - Blog
Hugging Face - Blog
V
V2EX
Project Zero
Project Zero

博客园 - Shake. Wang's blog

解决sqlserver2005中文版与vs2005的WebApplicationProject的冲突问题 Google的使命 - Shake. Wang's blog MagicAjax的中文问题 给web用户控件自定义后台事件 [导入]再谈css--如何针对不同位置的元素使用不同的风格 [导入]当css遇到xhtml--从display:inline到float:left - Shake. Wang's blog [导入][转]台湾鸿海总裁郭台铭给员工的一封邮件,很有借鉴意义 [导入]Unable to get the project ile from the web server错误的解决方法 [导入]ASP.NET 2.0 的内部变化 [导入]VSTS新鲜感触。。。 Blogger 的传说 超女运动终于谢幕了 基于MasterPage和UserControl的网站架构模式 也说: 谁来重燃开发者的激情 WebApplication的多国语言实现思路 cs第二次整容... 寻找丢失的iexplore进程 伟大架构师的秘密 抗战60周年祭
终极解决MagicAjax提交中文表单乱码的问题
Shake. Wang's blog · 2006-07-06 · via 博客园 - Shake. Wang's blog

上次,我遇到的 MagicAjax的中文问题, 当初为了演示,只是临时的使用了数字来绕过中文提交的问题,但不是最终的解决方法。今天终于忍不住这个乱码了,就打算解决它。先是到网上搜索一下,但都是说的另外一个问题。大部分人都是说把 magicajax post数据时的那个“loading...”修改成中文,出现乱码,这个好解决,这个汉字在 AjaxCallObject.js 文件里,直接把AjaxCallObject.js文件保存成utf-8就解决了。

我的问题是:页面上假如有个文本框,输入的是汉字,那么使用magicajax去提交数据到后台,在后台获取到的是乱码。打开magicajax的源码,找到 AjaxCallObject.js文件(之所以还是直接找这个文件,是因为ajax提交数据首先是通过js调用xmlhttp对象,将数据post到后台的,那么,就看看magicajax是不是把这个提交的数据进行了处理),找到使用xmlhttp提交的这段:

AjaxCallObject.prototype.DoAjaxCall =
function(eventTarget, eventArgument, ajaxCallType, ajaxScopeID, additionalData) {...... this.XmlHttp.open("POST", thePage, true); this.XmlHttp.onreadystatechange = function(){ oThis.ReadyStateChange(); }; this.XmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); this.XmlHttp.send(theData); }

可以看出在这里提交了theData数据,我用alert(theData)的方法将数据在提交前显示出来,发现提交的数据都直接显示是中文,然后再跟踪程序到后台,发现就已经是乱码了,这说明这个 AjaxCallObject.js 本身并没有对这个post的数据进行编码处理。

然后,就好办了,使用jscript里的 escape()函数将待post的数据在提交前编码一下,就不会出现中文了。代码如下:

if ( __bPageIsStored && eName == '__VIEWSTATE' ) continue; var type = curElem.type; var val = curElem.value; //这里对待提交的中文进行编码 //wangzhen 2006-07-06 val = escape(val); if ( type == "submit" || type == "button" ) continue; val = this.EncodePostData(val); if ( type == "select-multiple" || type == "select-one" ) { var selectLength = curElem.options.length; var optNameStr = this.EncodePostData(eName); for (var j=0; j < selectLength; j++) if (curElem.options[j].selected) theData = theData + optNameStr + '='
+ escape(curElem.options[j].value) + '&';

//当页面里有dropdownlist时,还有这里的编码也要处理 } else if ( (type != "checkbox" && type != "radio") || curElem.checked ) { theData = theData + this.EncodePostData(eName) + '=' + val + '&'; }

除此之外,还要找到如下这段代码并按注释修改:

AjaxCallObject.prototype.EncodePostData = function(data) { //由于已经使用了escape方法对postback的值进行了编码,这里不再替换“%” //wangzhen 2006-07-06 //return data.split("%").join("%25").split("=").join("%3d").
//split("&").join("%26").split("+").join("%2b");
return data.split("=").join("%3d").split("&").join("%26").split("+").join("%2b"); }

这样就解决了所有的中文乱码问题!

现在我已经把这个嵌入到资源里进行了重新编译成一个dll,点击这里可以直接下载使用。