2

我只是不明白。

我的情况是,我的应用程序在页面启动时从我的 PHP 服务器通过 JSON 发送所有需要的 GUI 文本。在我的 PHP 服务器上,我有所有用 UTF-8 编写的文本特殊字符。例子:Für

所以在客户端我有完全相同的值,除了输入字段外,它在任何地方都能很好地显示。当我使用 JavaScript 执行此操作时:

document.getElementById('myInputField').value = "FÖr";

然后它就像那样写,没有任何特殊字符的转换。

我理解 UTF-8 概念有什么问题吗?

感谢您的任何提示。

4

2 回答 2

4

该符号ü与 UTF-8 无关。使用字符引用是避免使用 UTF-8 的常用方法;它们可以与任何编码一起使用,但如果您使用 UTF-8,则不需要它们。

该符号ü是 HTML 符号,而不是 JavaScript。当它出现在您的 JavaScript 代码中时,它是否被 HTML 规则解释取决于上下文(例如 HTML 文档中的 JavaScript 与单独的 JavaScript 文件)。最好通过使用字符本身或使用JavaScript符号表示字符来避免此问题。

例如,ü表示与 相同ü,即 U+00FC,ü(带分音符的 u)。用于字符串文字的 JavaScript 表示法是\u00fc(\u后跟四个十六进制数字)。例如,以下将值设置为“Für”:

document.getElementById('myInputField').value = "F\u00fcr";
于 2012-05-19T13:48:18.510 回答
3

您使用所谓的HTML 实体来编码与 UTF-8 不同的字符,但当然 UTF-8 字符串可以包含 HTML 实体。

我认为问题在于标签属性不能包含 HTML 实体,因此在分配文本输入值属性时必须使用其他编码。我认为你有两个选择:

在客户端解码 HTML 实体。一个非常丑陋的解决方案,用于搭载浏览器中可用的解码器(我在示例中使用 jQuery,但您可能明白了这一点)。

inputElement.value = $("<p/>").html("F&#214;r").text();

另一个更好的选择是不在服务器响应中发送 HTML 实体,而是对所有字符使用正确的 UTF-8 编码,这些字符在放入文本节点或标签属性时应该可以正常工作。这当然假设 HTML 页面使用 UTF-8 编码。

于 2012-05-19T13:55:25.450 回答