Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript添加的HTML输入中的UTF-8_Javascript_Html_Utf 8_Input - Fatal编程技术网

JavaScript添加的HTML输入中的UTF-8

JavaScript添加的HTML输入中的UTF-8,javascript,html,utf-8,input,Javascript,Html,Utf 8,Input,我就是不明白 我的情况是,我的应用程序在页面启动时通过JSON从PHP服务器发送所有需要的GUI文本。在我的PHP服务器上,所有的文本特殊字符都是用UTF-8编写的。例如:Fü;r 因此,在客户端,我有完全相同的值,除了在输入字段上,它在任何地方都可以很好地显示。当我使用JavaScript执行此操作时: document.getElementById('myInputField').value = "FÖr"; 然后,它写得完全一样,没有任何转换成特殊字符 我是否理

我就是不明白

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

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

document.getElementById('myInputField').value = "FÖr";
然后,它写得完全一样,没有任何转换成特殊字符

我是否理解UTF-8概念中的错误

谢谢你的提示。

符号
ü与UTF-8没有任何特殊关系。使用字符引用是避免使用UTF-8的常见方法;它们可以用于任何编码,但如果使用UTF-8,则不需要它们

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

例如,
和#252
和#xfc,即U+00FC,U(U带分离)。用于字符串文本内部的JavaScript表示法是
\u00fc
\u
后跟四个十六进制数字)。例如,下面将值设置为“Für”:

document.getElementById('myInputField').value = "F\u00fcr";
您可以使用what调用来编码与UTF-8不同的字符,当然UTF-8字符串可以包含HTML实体

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

在客户端解码HTML实体。在浏览器中提供的解码器上搭载一个相当难看的解决方案(我在示例中使用jQuery,但您可能理解了这一点)

inputElement.value=$(“

”)html(“FÖ;r”).text();


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

我以为在传输“&…”时使用了正确的UTF-8编码?是的,这是正确的UTF-8,但
Ö
不会因为包含它的字符串使用UTF-8编码而神奇地变成“Ö”。在您的例子中,一旦您将字符串添加到DOM文本节点,它就会变成“Ö”,而DOM文本节点将为您执行HTML实体解码。
inputElement.value = $("<p/>").html("F&#214;r").text();