jQuery:AJAX变音符号和特殊字符很乱

我刚刚用jQuery创建了我的第一个ajax函数,实际上可以工作,但遗憾的是字符编码(对于像ä,ö,ü,ß,č,ć,å,ø这样的字符)是一场噩梦.

我的文件和我的数据库都是UTF-8.我在ajax函数PHP函数中尝试了很多选项,但都没有令人满意.

这是我的ajax

var dataString = {
 'name': name,'mail': mail
 // other stuff
}


    $.ajax({
type: "POST",url: "/post.PHP",data: dataString,contentType: "application/x-www-form-urlencoded;charset=UTF-8",cache: false,success: function(html){
 // do stuff
}

我已经尝试过没有contentType:“application / x-www-form-urlencoded; charset = UTF-8”,我试图将受影响的数据包装在encodeURIComponent()中,但没有一个工作.

当我在我的PHP中使用带有htmlentities()的AJAX时,我的变音符号在纯文本中看起来像这样:
UE×,AE×,OE×,ueü,aeä,oe o

数据库中这样:
UEœ,AEÓ,OEÃ,oe o

如果我不使用htmlentities()而不使用MysqL_real_escape_string()(或两者都没有),它们在纯文本中看起来很好,但它们在数据库中看起来像这样:
AEÓ,OEÃ-,UEÃ,aeÃouÃÃÃü

我现在已经尝试了几个小时的选择,但我找不到有效的解决方案.到目前为止,我似乎唯一的选择是让它们看起来像数据库中的混乱,但如果需要编辑这些数据集,那将是非常不利的.

解决方法

I’ve tried to wrap the affected data in encodeURIComponent()

不,如果你传入一个{}对象,jQuery会为你处理UTF-8和URL编码.

When I use that AJAX with htmlentities() in my PHP,my umlauts look like this in plain text: UE �,AE �,OE �,ue ü,ae ä,oe o

如果你必须使用htmlentities(),你必须在可选的$charset参数中告诉它你的编码是UTF-8,否则它将(愚蠢地)认将你的所有字节都视为ISO-8859-1,并将它们编码为不合适的实体引用,每个字节一个.

更好的是使用htmlspecialchars(),因为它不会尝试将不必要的编码应用于除了真正需要它的几个ASCII字符之外的字符.

And like this in the database: UE Ü,AE Ä,OE Ö,oe o

你是如何确定的?您用来从数据库获取数据的工具是否了解Unicode? (如果它是一个狡猾的PHP Web管理界面,也许不是.PHP在Unicode上并不出色.)

您可能在数据库中存储了正确的UTF-8字节,但是在标记为具有Latin-1排序规则的表中.这将是有效的,因为你将获得相同的字节输出,但如果MysqL不知道它们是UTF-8字节,那么ASCII范围之外的不区分大小写的字符串比较将无法正常工作,所以寻找Ä不符合ä.这对你来说可能或不重要.

If I don’t use htmlentities() but MysqL_real_escape_string() instead

哇,小心. HTML-escaping用于页面输出阶段.创建SQL查询时发生sql-string-literal-escaping.你需要他们两个,但不要混淆他们或尝试在同一阶段做他们,或者你会有各种奇怪的逃脱 – 错误和潜在的漏洞.

相关文章

页面搜索关键词突出 // 页面搜索关键词突出 $(function () {...
jQuery实时显示日期、时间 html: <span id=&quot...
jQuery 添加水印 <script src="../../../.....
中文:Sys.WebForms.PageRequestManagerParserErrorExceptio...
1. 用Response.Write方法 代码如下: Response.Write(&q...
Jquery实现按钮点击遮罩加载,处理完后恢复 思路: 1.点击按...