jQuery:AJAX 变音符号和特殊字符一团糟

标签 jquery character-encoding

我刚刚用 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 �–、ue �、ae �、oe o

如果我不使用 htmlentities() 而是使用 mysql_real_escape_string() (或两者都不使用),它们在纯文本中看起来不错,但它们在数据库中看起来像这样: AE ×、OE ×、UE ×、ae × oe × ue ×

几个小时以来我一直在尝试大量选项,但找不到有效的解决方案。到目前为止,我似乎唯一的选择是让它们看起来像数据库中的一团糟,但如果需要编辑这些数据集,那将非常适得其反。

最佳答案

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 Ö, ue ü, ae ä, 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 转义用于页面的输出阶段。 SQL 字符串文字转义在创建 SQL 查询时发生。您两者都需要,但不要混淆它们或尝试在同一阶段执行它们,否则您将遇到各种奇怪的转义错误和潜在的漏洞。

关于jQuery:AJAX 变音符号和特殊字符一团糟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2539090/

相关文章:

javascript - $ 不是函数错误

javascript - Jquery 从文本中获取值

jquery - IE7 和 IE8 中的 Galleria Javascript 画廊

python - 信息似乎不正确地从 mysqldb 中出来,python django

java - 具有非 UTF-8 字符集的 JAR 文件

javascript - 在选择框 HTML 中显示 UTF8 和 ISO-8859-1

javascript - 返回主视图后,删除 Logo 问候语并修复滚动条位置

jquery - 将变量添加到 jQuery src 属性

http - UTF8 +转义我们的国际网址是标准的吗?

python - 使用 latin1 字符集对表中的 UTF8 数据进行编码