【发布时间】:2010-09-09 07:35:02
【问题描述】:
在我的网站上,访问者可以进行一些内联编辑。我将 ajax 与 MySQL 数据库和 PHP 一起使用。我希望在网站上使用荷兰语。
我的挑战是让字符编码正常工作。
我可以使用以下建议:
- 数据库(我使用 utf-8 吗?latin1_swedish_ci)
- 数据库中的表(我希望它们与数据库相似。)
- 在 ajax 调用中使用的转义 (x = escape(x);)
- 网页字符集(UTF-8?ISO-something?)
- 这一切如何协同工作。
我使用 nicEdit 作为 javascript 所见即所得的编辑器。
我当然可以解释当我想保存 ë 时会发生什么,如果这对我有帮助,但我认为最好理解这个问题,而不是仅仅试图快速修复它。
[编辑] 详细说明:
我在我的 PHP 中使用这些$input = stripslashes($input); //(if magic quotes are 'on')$input = mysql_real_escape_string($input);$input = strip_tags($input, '<strong><em><span><ul><ol><p><a><br><li>');
在我的html页面中:<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
Javascript:x = excape(x);
数据库:MySQL connection collation: utf8_general_ciTable options: DEFAULT CHARSET=utf8
这是一个例子:
我输入(内联)单词 Rëg(在我的 Mac 上使用 'option+u' 然后 'e')。
我保存这个词。它显示如下:网页上的 R�g。
在数据库中,我找到了 Rëg。
我打开编辑器,除了再次保存之外什么都不做,它显示:R%uFFFDg 在数据库和页面上。之后它不再改变。
非常感谢任何帮助。
金
【问题讨论】:
-
评论因为它不是一个完整的答案,但是:数据库条目之前的转义必须在服务器端完成,而不是在客户端完成。即使您在客户端进行了验证,您也不能相信来自客户端的任何内容。
-
是的,utf-8 是一种方法。其余的最终都可以解决。
-
如果你想了解这件事,不要把完全不同的事情搞得一团糟。数据库是一回事,HTML 是另一回事,AJAX 是另一回事。把每一个拿出来分别算出来
-
ë 并不奇怪,不需要任何转义。您可能遇到的唯一问题是可以轻松解码的 AJAX 响应。
-
@T.J.克劳德谢谢你的评论,我确实在将东西放入我的分贝之前使用了一些验证
标签: javascript mysql utf-8 character-encoding escaping