【问题标题】:Force display text from Unicode in input field [duplicate]强制在输入字段中显示来自 Unicode 的文本 [重复]
【发布时间】:2010-09-22 16:43:08
【问题描述】:

我们正在执行 AJAX 调用以从数据库中检索。由于我们的客户可能使用不同的语言,我们将所有内容编码为 Unicode 以存储在数据库中(无需担心排序规则等)。现在,当我们获取要显示在输入文本字段中的此类内容时,它正在显示 Unicode 代码。检查了HTML 4 documentation for input,值是CDATA,它告诉我那些unicode应该显示为他们的字符。
从随附的屏幕截图中,您可以看到情况并非如此,我想知道是否有办法“强制”这种行为。

【问题讨论】:

  • 强制使用有效字符的最佳方法是使用适当的编码 - UTF8。你知道,现在是 2010 年。
  • 我很抱歉,那不是 ASCII,那是 unicode。是的,我知道现在是 2010 年,我们生活在地球上,谢谢。
  • 您将“Unicode”与“HTML 实体”混淆了。
  • 哎呀,放弃命名约定问题仍然存在,知道吗?

标签: javascript ajax unicode html-entities


【解决方案1】:

由于我们的客户可能使用不同的语言,我们将所有内容编码为 ascii 以存储在数据库中(无需担心排序规则等)。

恕我直言,将 html 实体存储到数据库中是一种非常糟糕的方法。我强烈建议您在任何地方都使用 UTF-8 编码。这将使您不必担心排序规则等。

【讨论】:

  • 抱歉,那不是 ASCII,那是 unicode。
【解决方案2】:

您正在传递一个包含 &#...; 数字字符引用的 JavaScript 字符串。 JavaScript 字符串不是 HTML 编码的,因此您的代码确实会生成一个 JS 字符串,其中包含与号、哈希等。

当您将其设置为输入的 DOM 值 (val()) 时,这些 & 符号自然仍会存在。 DOM 属性是纯字符串,而不是标记。如果您打算将它们标记为用于innerHTML/html(),则只需在 JavaScript 中对字符串进行 HTML 编码。

所以 PHP 不应该对不会插入 HTML 的内容进行 HTML 编码。使用 json_encode() 创建 JavaScript 字符串文字:

$('#js_global_status_input').val(<?php echo json_encode($status_value); ?>);

【讨论】:

  • 非常感谢您的时间和建议,但是它对我来说不起作用,这是 ajax 响应:$("#js_status_input").val("מ 1492; בראש שלך?");即使用 json_encode
  • 您仍在传递与号和哈希值等。不要那样做,它们除了标记之外没有任何意义。 val() 不是标记,您需要传递一个普通的、未编码的字符串:val('מה בראש שלך'),或者,如果在 JSON 字符串中为 ASCII 安全而转义(默认情况下 json_encode 会这样做),则 val("\u05de\u05d4 \u05d1\u05e8\u05d0\u05e9 \u05e9\u05dc\u05da")。你需要让你的服务器端脚本停止对它吐出的值进行 HTML 编码。
  • 如果你的数据库内容中确实有&amp;#1502;&amp;#1492;...,那么你就有大问题了。虽然您可以尝试通过在 PHP 中调用 html_entity_decode($s, ENT_QUOTES, 'utf8') 来修复此问题,但在您的数据库中包含 HTML 编码的文本肯定表明您的应用程序正在做一些非常错误的事情,例如对所有输入进行 HTML 编码,而不是在输出阶段。数据库内容应始终以原始文本形式保存。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-15
  • 1970-01-01
  • 2016-11-18
  • 1970-01-01
  • 2016-01-08
  • 2013-03-25
  • 2012-07-21
相关资源
最近更新 更多