jquery ajax表单特殊字符乱码问题(serialize)

楼主
jquery ajax表单特殊字符乱码问题(serialize)
[P]最近leadbbs论坛偶尔收到这样的帖子内容:[/P][QUOTE][P]德里克仿匏故抢飞匣竦米钣屑壑登蛟苯毕钭钅昵岬那蛟?Form_HTMLFlag=2[/P][P]鎴戠敤鎵嬫満涓婅鍧涙樉绀轰贡鐮?Form_HTMLFlag=2 [/P][P][/QUOTE][/P][P]可点此查看更多的表现:[URL=http://www.leadbbs.com/Search/Search.asp?key=Form_HTMLFlag&key_mode=0&BoardID2=0&key_user=&key_userid=&key_order=0]http://www.leadbbs.com/Search/Search.asp?key=Form_HTMLFlag&key_mode=0&BoardID2=0&key_user=&key_userid=&key_order=0[/URL][/P][P]本以为是客户端浏览器对post的数据无规则或是可能的意外导致,自己发帖也从未出现此类情况,直到今天发帖出现此问题,开始对此情况进行分析。[/P][P]
[/P][P]jquery 一般使用 serialize或serializeArray 来序列化表单值,并最终将json数据重要组合,post至服务器。[/P][P]在将json数据重组的过程中,一些特殊字符的存在会使表单的内容成为乱码。比如asc码值128-255的一些字符。[/P][P]
[/P][P]此问题可以通过以下办法解决:[/P][P]先在客户端将serialize后的json数据编码:[/P][P][CODE]jsondata[i]["value"] = escape(jsondata[i]["value"]).replace(/\%u/gi,"\\u").replace(/\%/gi,"\\u00");[/CODE][/P][P]服务端对传送过来的表单值重新解码,以asp为例:[/P][P]
[/P][CODE]function uniDecode(enStr)
 dim str2 : str2 = enStr
 str2 = split(str2,"\u")
 dim length,i,l
 length = ubound(str2)
 dim s : s = ""
 if length >= 0 then s = str2(0)
 for i = 1 to length
  l = Len(str2(i))
  if l>0 then
   if l<=4 then
    s = s & unescape("%u"&str2(i))
   else
    s = s & unescape("%u"&mid(str2(i),1,4))
    s = s & mid(str2(i),5)
   end if
  end if
 next
 uniDecode = s
end function[/CODE][P][/P][P]
[/P][P]作者 SpiderMan(钱丰云)
[/P]

电脑版 Page created in 0.0859 seconds with 4 queries.