9

Html 实体必须在 HTML 页面中的图像的 alt 属性中编码。所以

<img id="formula" alt="A &rarr; B" src="formula.png" />

会很好用。

另一方面,相同的 JavaScript 代码将无法工作

document.getElementById('formula').alt = 'A &rarr; B';

并且会产生一个→ B而不是A → B

当无法在源代码中放置特殊(未编码)字符时,如何通过 JavaScript 执行此操作?

4

4 回答 4

8

JavaScript 有自己的系统来转义字符串中的特殊字符:

document.getElementById('formula').alt = 'A \u2192 B';
于 2010-05-05T18:02:24.947 回答
1

如果您无法使用 Unicode 格式保存文件,可以使用以下替代方法:

function decodeHTML(str) {
    return str.replace(/&#(\d+);?/g, function() {
        return String.fromCharCode(arguments[1])
    });
}

但是,这需要您使用数字表示。在这种情况下&#8594;

于 2010-05-05T17:55:12.373 回答
1
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Decode HTML entities using JavaScript</title>
  </head>
  <body>
    <img id="formula" src="vote-arrow-up-on.png" alt="A &rarr; C">
    <script>
      function html_entity_decode(str) {
        var p = document.createElement("p");
        p.innerHTML = str.replace(/</g,"&lt;").replace(/>/g,"&gt;");
        return p.innerHTML;
      }

      var theValue = html_entity_decode('A &rarr; B');
      document.getElementById('formula').title = theValue;
    </script>
  </body>
</html>

归功于JavaScript 源代码

编辑:我将原始代码更改为仅用于innerHTML元素<p>innerHTML value不是<textarea>.

于 2010-05-05T17:32:33.573 回答
0

在这种特殊情况下,您没有在 JavaScript 中编码特殊的 HTML 字符。

W3C 验证器不应该抱怨这个(只是测试它)并且文档应该验证。如果不发布您的代码,我会更新我的答案。

于 2010-05-05T17:28:15.470 回答