我有一个Web应用程序(UTF-8),其中可以使用以下一个发送到服务器端
áéíóú
àèìòù
ÀÈÌÒÙ
ÁÉÍÓÚ
确定。我使用类似如下的内容来发送数据
// Notice $("#myForm").serialize()
$.get("/path?", $("#myForm").serialize(), function(response) {
});
当我看到我的recordSet时,我得到(数据库charSet编码为UTF-8)
áéÃóú
à èìòù
ÃÉÃÓÚ
ÀÈÌÒÙ
即使使用$ .post,我也会获得相同的结果集
在Action book中看到JQuery中的serialize()方法后:
从包装集中的所有成功表单元素中创建格式正确且编码的查询字符串
但是,如上所示,它似乎不能正常工作。因此,我使用
而不是serialize()方法var objectArray = $("#myForm").serializeArray();
var queryString = "";
for(var i = 0; i < objectArray.length; i++) {
queryString += "&" + objectArray[i]["name"] + "=" + objectArray[i]["value"];
}
$.get("/path?" + queryString, null, function(response) {
});
现在我进入数据库
áéíóú
àèìòù
ÀÈÌÒÙ
ÁÉÍÓÚ
所以我在使用serialize()方法时遗漏了什么?为什么serialize()方法不能按预期工作?
答案 0 :(得分:5)
我使用以下行在PHP中解决它:
foreach($_POST as $key => $value) {
$_POST[$key] = utf8_decode($value);
}
答案 1 :(得分:3)
jQuery.get
像所有函数一样,jQuery ajax使用encodeURIComponent
作为数据。
如果您通过GET发送数据,XHR会自动处理传递URL的编码。
您可以查看encode
的文档,了解哪种编码类型适合您发送的数据
答案 2 :(得分:1)
我和IE有类似的问题。我在页面加载javascript以下内容:
$.ajaxSetup({
contentType: "application/x-www-form-urlencoded; charset=UTF-8"
});
这似乎解决了大多数人的问题。
答案 3 :(得分:0)
您应该将以下元标记添加到发起和接收页面的开头:
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
这将默认页面以utf-8呈现内容。如果单独使用此功能,除了在发送时对字符进行编码外,您还可以使用encodeURIComponent()
。如果编码未自动解码,如果需要在接收端,请运行decodeURIComponent()
。
答案 4 :(得分:0)
Serialize不适用于IE和ISO-8859-1字符。
请参阅http://forum.jquery.com/topic/serialize-problem-with-latin-1-iso-8859-1-and-solution
我还添加了测试
if( $.browser.msie )
因为在FF工作,这个黑客不起作用。