- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个带有 UTF-8 header 的页面:
<meta charset="utf-8" />
在页面中,我使用 umbraco 字典来获取各种语言的内容。当我在页面上用德语打印时,它看起来很好:
<h1>@library.GetDictionaryItem("A")</h1>
决议:
<h1>Ä</h1>
用德语
但是如果我通过脚本输入它:
<script type="text/javascript" charset="utf-8">
var a = "@library.GetDictionaryItem("A")";
alert(a);
</script>
警报打印:
ä
如果我这样做
<script type="text/javascript" charset="utf-8">
var a = "Ä";
alert(a);
</script>
警报打印:
Ä
那么什么可以解释这种行为,我该如何修复警报?据我所知,一切都是 UTF-8,字典和页面编码都很好。问题发生在 Javascript 中。
从我在这里的表格中可以看出,Javascript 将字符解析为其数值。我使用了“escape、encodeUrl、decodeUrl”等,但没有成功。
chr HexCode Numeric HTML entity escape(chr) encodeURI(chr)
ä \xE4 ä ä %E4 %C3%A4
最佳答案
(FWIW:字符实体 ä
是 ä
,而不是 Ä
。)
这与字符编码无关。您正在将 HTML 实体 输出到 JavaScript 字符串,然后要求浏览器显示该 JavaScript 字符串而不执行任何解释 HTML 的操作(通过 alert
)。就像您实际输入的一样:
<h1>ä</h1>
...(将在页面上显示 ä
)和
<script>
var a = "ä";
alert(a);
</script>
...这不会。 HTML 实体不会在任何理解 HTML 实体的地方使用。 alert
不解释 HTML。
但是如果你这样做:
<script>
var a = "ä";
var div = document.createElement('div');
div.innerHTML = a;
document.body.appendChild(div);
</script>
...您会在页面上看到字符,因为我们将实体赋予将解释 HTML 的东西 (innerHTML
)。所以如果你写第一行:
var a = "@library.GetDictionaryItem("A")";
...然后在 HTML 上下文中使用 a
(如上所述),您将在文档中获得 ä
。
如果您总是从 Umbraco 获得十进制数字字符实体(如 ä
),因为它们定义了 unicode 代码点,而 JavaScript(大部分)使用 unicode 代码指向它的字符串*,您可以很容易地解析实体:
function characterFromDecimalNumericEntity(str) {
var decNumEntRex = /^\&#(\d+);$/;
var match = decNumEntRex.exec(str);
var codepoint = match ? parseInt(match[1], 10) : null;
var character = codepoint ? String.fromCharCode(codepoint) : null;
return character;
}
alert(characterFromDecimalNumericEntity("ä")); // ä
* 为什么是“大部分”:JavaScript 字符串由对应于 UTF-16 代码单元 的 16 位“字符”组成,而不是 Unicode 代码点(您不能存储 Unicode 代码指向 16 位,则需要 21)。 Basic Multilingual Plane 中的所有字符适合一个 UTF-16 代码单元,但来自 Supplementary Multilingual Plane 的字符, Supplementary Ideographic Plane , and so on一个字符需要两个 UTF-16 代码单元。其中一个字符将占用 JavaScript 字符串中的两个“字符”。上面的功能对他们来说会失败。更多内容 the JavaScript spec和 the Unicode FAQ .
关于重音字符的javascript编码问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22783702/
我正在寻找一种方法来支持不区分大小写 + 重音不区分搜索的良好性能。到目前为止,我们在使用 MSSql 服务器时没有遇到任何问题,在 Oracle 上我们必须使用 OracleText,而现在我们在
这个问题已经有答案了: Trouble with UTF-8 characters; what I see is not what I stored (5 个回答) 已关闭 5 年前。 我刚刚将一个我
我正在寻找一种在 Linux 中使用反引号 (`)/波形符 (~) 键和其他一些键创建键盘快捷键的方法。在理想情况下: 按下波形符没有任何作用 按下波形符的同时按另一个键会触发(可自定义的)快捷方式
我有一个由术语组成的数组,其中一些包含重音字符。我像这样做一个 preg grep $data= array('Napoléon','Café'); $result = preg_grep('~' .
我使用 TextBox 在 DataGridView 中进行过滤 image .这是完美的工作。表格的单元格包含 1250 个拉丁字符。我想搜索忽略单元格中单词的重音。例子。如果是文本框 "knjaz
我在 Vim 中遇到一个奇怪的映射问题。我使用的是 Azerty 键盘。 在我的 .vimrc 中,我有以下命令可以在段落之间快速移动。 nnoremap _ { vnoremap _ { nnore
我尝试读取一个utf8编码的vcf文件,结果是: { "name": "=4A=61=76=69=65=72=20=4C=75=6A=C3=A1=6E", "tel":
我的数据库中有两个表,info 和 comment,它们的结构如下: info (id(int(10)), name(varchar(80)), ...19 other columns.., phon
我使用 QtWebkit 制作了一个应用程序。在同一个 html 页面中,在 Windows 上使用重音符号(西类牙语)时可以正常工作,但在 Linux (Ubuntu) 上则不起作用。 我不明白为什
我有(例如)两个字符串: $a = "joao"; $b = "joão"; if ( strtoupper($a) == strtoupper($b)) { echo $b; } 我希望它是
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: invalid multibyte char (US-ASCII) with Rails and Ruby
我重写 URL 以包含用户生成的旅游博客的标题。 我这样做是为了 URL 的可读性和 SEO 目的。 http://www.example.com/gallery/280-Gorges_du_Tod
我最近安装了新的 Windows 10 build 14393,我想使用新的 linux 子系统。所以我决定学习 ncurses,但我找不到如何从 getch 中获取带有重音符的字符的 UTF-8 代
我是一名优秀的程序员,十分优秀!