gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 23:00:03 24 4
gpt4 key购买 nike

我刚刚用 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com