- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我刚刚用 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/
COW 不是奶牛,是 Copy-On-Write 的缩写,这是一种是复制但也不完全是复制的技术。 一般来说复制就是创建出完全相同的两份,两份是独立的: 但是,有的时候复制这件事没多大必要
我是一名优秀的程序员,十分优秀!