我有一个JQuery脚本将表单域的内容发送到一个简单的servlet。当我将中文字符(在utf8中)放入表单域并使用JQuery .ajax()方法进行post时,服务器会将字符视为问号(欢迎进入智慧的十年被视为?在服务器上)。
$.ajax({ url: '/url-on-server', type: 'POST', data: 'action=SEND&'+ $('#text-field').val()), success: function(){}, dataType: 'json' }
我已经用FIREBUG和Liveheaders检查了请求,它们看起来很好……
Content-Type text/plain; charset=UTF-8
我相信这不是服务器端的事情,b/c当我将html表单更改为post而不使用JQuery脚本时,它工作得很好。我可以在服务器端看到中文字符,而不需要在服务器端做任何更改。
另一条线索..
当我使用JQuery $.ajax()方法发布表单时。这就是请求在LiveHeaders中的样子...
action=SEND&msg=%E6%AC%A2%E8%BF%8E%E8%BF%9B%E5%85%A5%E6%99%BA%E6%85%A7%E7%9A%84%E5%8D%81%E5%B9%B4
然而,当我以传统的web1.0方式发布表单时,这是我在live headers中看到的。
action=SEND&msg=%26%2327426%3B%26%2336814%3B%26%2336827%3B%26%2320837%3B%26%2326234%3B%26%2324935%3B%26%2330340%3B%26%2321313%3B%26%2324180%3B
正如你所看到的,它似乎以一种不同的方式对参数进行了编码,但我还无法在谷歌上搜索到解释或修复这个问题的方法。
提前感谢你的帮助。
发布于 2010-12-22 16:24:07
第一个:
action=SEND&msg=%E6%AC%A2%E8%BF%8E%E8%BF%9B%E5%85%A5%E6%99%BA%E6%85%A7%E7%9A%84%E5%8D%81%E5%B9%B4...is字符串的URL转义形式:
action=SEND&msg=欢迎进入智慧的十年第二个:
action=SEND&msg=%26%2327426%3B%26%2336814%3B%26%2336827%3B%26%2320837%3B%26%2326234%3B%26%2324935%3B%26%2330340%3B%26%2321313%3B%26%2324180%3B ...is UTF-8字符串的URL转义形式:
action=SEND&msg=欢迎进入智慧的十年那些HTML实体,我假设(我还没有检查过)是您的亚洲字符。然而,我不认为在x-www-form-urlencoded中发送HTML实体是有效的-字符本身应该被使用,所以我很惊讶您看到了这一点。在一个快速测试中,将您的亚洲字符串提交到http://www.opinionatedgeek.com/dotnet/tools/base64decode/ (我能找到的第一个POST表单),我得到了示例,而不是第二个。您确定第二个就是正在传输的内容吗?(我会向Wireshark查询)什么浏览器,表单是如何构造的,等等?
https://stackoverflow.com/questions/4505855
复制相似问题