【问题标题】:javascript, mysql database and escaping 'weird' charactersjavascript、mysql 数据库和转义“奇怪”字符
【发布时间】: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_ci
Table 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


【解决方案1】:

在网页上显示如下:R�g。

您需要指示网络浏览器您正在以 UTF-8 显示网页,并且它应该将其解释为相同。将以下内容添加到您的 PHP 顶部,向输出发出任何字符之前:

header('Content-Type: text/html; charset=utf-8');

只有<meta> 标签是不够的。网络浏览器不使用它。重要的是响应标头。对了,Javascript的escape()函数是deprecated

另见:

【讨论】:

  • 感谢 BalusC。我在 session_start() 正下方添加了该行,但 ë 仍显示为带问号的菱形。还有关于不推荐使用的功能的提示,我会替换它。
  • 再次感谢 BelusC :-) 用 encodeURIComponent 替换转义就成功了。
  • 哦,你是用JS提交表单吗?顺便说一句,它是带有 a 的 BalusC,而不是 e。事实上,要标记问题已解决,您无需在问题标题中添加一些大喊大叫,而只需标记最有帮助的答案已接受 :) 另请参阅 stackoverflow.com/faq
  • 大声笑(我的意思是“大声笑”)我不是在开玩笑,我是在为幸福而欢呼,BalusC。支票加了,我再改标题……
【解决方案2】:

只要对所有内容使用 UTF-8,通常它就可以工作。

【讨论】:

  • 嘿 Reinis,我不知道如何将 UTF-8 用于所有内容。我相信我在某处读到 javascript 使用了一些 ISO 编码。我该如何改变?
  • 您可以将charset="utf-8" 属性添加到您的外部脚本元素以将它们加载为utf-8。不过,仅当您有未转义的字符串文字时才需要它。 CSS 允许您使用@charset 'utf-8';,但仅当您的 CSS 中有未转义的字符串文字时才需要这样做,而且这种情况很少见。至于其他一切,只需将其设置为使用 UTF-8。在 MySQL 中使用 utf8 排序规则,在 HTML 中使用 Content-Type: text/html;charset=utf-8 标头等。
  • 谢谢 Reinis,我已经完成了所有这些,正如我在上面的帖子中所描述的(部分编辑)。原来我在我的 javascript 中使用了错误的转义。呸。但再次感谢您的详尽回答。
猜你喜欢
  • 2010-12-27
  • 2019-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多