个人随笔
目录
当前位置: 首页 JS 理解HTML Entity
理解HTML Entity
2020-04-29 23:03:44

1、HTML Entity

1.1 介绍

在编写HTML页面时,需要用到”<”、”>”、”空格”等符号,直接输入这些符号时,会错误的把它们与标记混在一起,非常不利于编码。

那么就需要把这些字符进行转义,以另一种方式抒写,以相同的形式展现。

在HTML中,这些字符可称为HTML Entity,即HTML 字符实体。一个HTML Entity都含有2种转义格式:Entity Name 和 Entity Number。

可参考MDN关于HTML Entity的解释 :https://developer.mozilla.org/en-US/docs/Glossary/Entity

1.1.1 Entity Name

格式: &entityName;

说明:”&”开头,”;”结尾,以语义的形式描述字符。如字符”<”,英文名称为”less than”,Entity Name为”<”,取自”less than”2个单词的首字母。

1.1.2 Entity Number

格式: &#entityNumber;

说明:”&#”开头,”;”结尾,以编号的形式描述字符。此编号可以为十进制或十六进制(以”&#x”开头)等数字格式。

1.1.3 示例

  1. <p>字符 :<</p>
  2. <p>Entity Name :&lt;</p>
  3. <p>Entity Number(十进制) :&#60;</p>
  4. <p>Entity Number(十六进制) :&#x3c;</p>

可看到Entity Name、 Entity Number都在页面显示为”<”字符。

1.2 HTML Entity包括哪些字符呢?

包括但不限于以下字符:ASCII Characters(可见部分)、ISO 8859-1 Characters、ISO 8859-1 Symbols、Math Symbols、Greek Letters、Miscellaneous HTML entities。

在实际编码时不是所有字符都要转义的,比如a-z、A-Z等是没必要转义的。


2. 字符与Entity Name的互相转换

Entity Name 与 字符的互相转换只能依靠字符对照表转换。更多字符对照表可参考:https://www.freeformatter.com/html-entities.html

2.1 ASCII 字符列表:

  1. Character Entity Name Entity Number(十进制)
  2.     &nbsp; &#32;
  3. !     &excl; &#33;
  4. "     &quot; &#34;
  5. #     &num; &#35;
  6. $     &dollar; &#36;
  7. %     &percnt; &#37;
  8. &     &amp; &#38;
  9. '     &apos; &#39;
  10. (     &lpar; &#40;
  11. )     &rpar; &#41;
  12. *     &ast; &#42;
  13. +     &plus; &#43;
  14. ,     &comma; &#44;
  15. -     &hyphen; &#45;
  16. .     &period; &#46;
  17. /     &sol; &#47;
  18. :     &colon; &#58;
  19. ;     &semi; &#59;
  20. <     &lt; &#60;
  21. =     &equals; &#61;
  22. >     &gt; &#62;
  23. ?     &quest; &#63;
  24. @     &commat; &#64;
  25. [     &lsqb; &#91;
  26. \     &bsol; &#92;
  27. ]     &rsqb; &#93;
  28. ^     &circ; &#94;
  29. _     &lowbar; &#95;
  30. `     &grave; &#96;
  31. {     &lcub; &#123;
  32. |     &verbar; &#124;
  33. }     &rcub; &#125;
  34. ~     &tilde; &#126;

2.2 字符转换为Entity Name

  1. // ASCII字符集:char 2 entityName
  2. var asciiChartSet_c2en = {
  3. ' ': '&nbsp;',
  4. '!': '&excl;',
  5. '"': '&quot;',
  6. '#': '&num;',
  7. '$': '&dollar;',
  8. '%': '&percnt;',
  9. '&': '&amp;',
  10. '\'': '&apos;',
  11. '(': '&lpar;',
  12. ')': '&rpar;',
  13. '*': '&ast;',
  14. '+': '&plus;',
  15. ',': '&comma;',
  16. '-': '&hyphen;',
  17. '.': '&period;',
  18. '/': '&sol;',
  19. ':': '&colon;',
  20. ';': '&semi;',
  21. '<': '&lt;',
  22. '=': '&equals;',
  23. '>': '&gt;',
  24. '?': '&quest;',
  25. '@': '&commat;',
  26. '[': '&lsqb;',
  27. '\\': '&bsol;',
  28. ']': '&rsqb;',
  29. '^': '&circ;',
  30. '_': '&lowbar;',
  31. '`': '&grave;',
  32. '{': '&lcub;',
  33. '|': '&verbar;',
  34. '}': '&rcub;',
  35. '~': '&tilde;'
  36. }
  37. // e.g. 字符转换为Entity Name
  38. var oldStr = '(中文)';
  39. var newStr = oldStr.replace(/(\D{1})/g, function(matched) {
  40. var rs = asciiChartSet_c2en[matched];
  41. return rs == undefined ? matched : rs;
  42. });
  43. console.log(newStr); // => &lpar;中文&rpar;

2.3 Entity Name转换为字符

  1. // ASCII字符集:entityName 2 char
  2. var asciiChartSet_en2c = {
  3. '&nbsp;': ' ',
  4. '&excl;': '!',
  5. '&quot;': '"',
  6. '&num;': '#',
  7. '&dollar;': '$',
  8. '&percnt;': '%',
  9. '&amp;': '&',
  10. '&apos;': '\'',
  11. '&lpar;': '(',
  12. '&rpar;': ')',
  13. '&ast;': '*',
  14. '&plus;': '+',
  15. '&comma;': ',',
  16. '&hyphen;': '-',
  17. '&period;': '.',
  18. '&sol;': '/',
  19. '&colon;': ':',
  20. '&semi;': ';',
  21. '&lt;': '<',
  22. '&equals;': '=',
  23. '&gt;': '>',
  24. '&quest;': '?',
  25. '&commat;': '@',
  26. '&lsqb;': '[',
  27. '&bsol;': '\\',
  28. '&rsqb;': ']',
  29. '&circ;': '^',
  30. '&lowbar;': '_',
  31. '&grave;': '`',
  32. '&lcub;': '{',
  33. '&verbar;': '|',
  34. '&rcub;': '}',
  35. '&tilde;': '~',
  36. }
  37. // e.g. Entity Name转换为字符
  38. var oldStr = '&lpar;中文&rpar;';
  39. var newStr = oldStr.replace(/(&.+?;)/g, function(matched) {
  40. var rs = asciiChartSet_en2c[matched];
  41. return rs == undefined ? matched : rs;
  42. });
  43. console.log(newStr); // => (中文)

3. 字符与Entity Number的互相转换

3.1 字符转换为Entity Number

String的实例方法 charCodeAt() 可把指定字符转换为编码:

  1. var charCode = '('.charCodeAt(0); // => 40
  2. var entityNumber = '&#' + charCode + ';' // => (

3.2 Entity Number转换为字符

String的静态方法 fromCharCode() 可把指定编码转换为字符,而Entity Number的编码可以为十进制或16进制,所以转换时进行分别处理:

  1. /**
  2. * Entity Number转换为字符
  3. * @param {String} entityNumber entityNumber
  4. */
  5. var getCharByEntityNumber = function(entityNumber) {
  6. var num = entityNumber.replace('&#', '').replace(';', '');
  7. if (num.indexOf('x') == 0) {
  8. num = Number.parseInt(num, 16); // 16进制转换为10进制
  9. } else {
  10. num = Number.parseInt(num); // 10进制
  11. }
  12. var char = String.fromCharCode(num);
  13. return char;
  14. }
  15. // e.g.
  16. var oldStr = '&#40;中文&#41;';
  17. var newStr = oldStr.replace(/(&#\d+;)/g, function(matched) {
  18. return getCharByEntityNumber(matched);
  19. });
  20. console.log(newStr); // => (中文)

转自:https://www.cnblogs.com/polk6/p/html-entity.html

 647

啊!这个可能是世界上最丑的留言输入框功能~


当然,也是最丑的留言列表

有疑问发邮件到 : suibibk@qq.com 侵权立删
Copyright : 个人随笔   备案号 : 粤ICP备18099399号-2