html字符实体
  在HTML中,有些些字符是预留的,有特殊意义的,所以这些字符是不允许在文本中使用的。比如小于号(<)和大于号(>)。如果希望正确地显示预留字符,我们必须HTML 源代码中使用字符实体(character entities)。
  要转换html实体的原因主要是在html页面中有一些字符实体如果不转换的话会对本身的html页面产生影响,这里面主要就有<,>,",',空格等。
  下面是一些常见的HTML字符实体  
| 显示结果 | 描述 | 实体名称 | 实体编号 | 
|---|---|---|---|
| 空格 |   | 
  | 
|
| < | 小于号 | < | 
< | 
| 大于号 |
>|>
& | 和号 |&|&
“ | 双引号 |"|"
‘ | 单引号 |'|'
′ | 重音符 |´|`
© | 版权 |©|©
® | 注册商标 |®|®
™ | 商标 |™|™
在实际的工作中经常会遇到要处理HTML字符实体的情况,这里我总结了一些处理方法。
php
  1. htmlspecialchars()
  htmlspecialchars() 函数把预定义的字符转换为 HTML 实体。
  预定义的字符包括:&,",',<,>  
| 参数 | 必需性 | 描述 | 
|---|---|---|
| string | 必需 | 规定要转换的字符串 | 
| quotestyle | 可选 | 规定如何编码单引号和双引号 ENT_COMPAT - 默认。仅编码双引号。 ENT_QUOTES - 编码双引号和单引号。 ENT_NOQUOTES - 不编码任何引号。  | 
| character-set | 可选 | 字符串值,规定要使用的字符集。 | 
| double_encode | 可选 | 布尔值。规定了是否编码已存在的 HTML 实体。 | 
提示和注释
提示:在 PHP5.4 之前的版本,无法被识别的字符集将被忽略并由 ISO-8859-1 替代。自 PHP5.4 起,无法被识别的字符集将被忽略并由 UTF-8 替代。 character-set 自5.6版本开始默认使用的字符集可以在设置项中改变。对应的解码函数htmlspecialchars_decode()。
  2. htmlentities()
  这个函数的参数是和htmlspecialchars()完全相同的,它们的区别就在于htmlspecialchars()只会转换特定的字符,就是上面所说的预定义的字符;而htmlentities()会转换所有的html字符实体;对应的解码函数html_entity_decode()。
javascript
  1. 利用正则匹配转换
    function html_encode(str)
    {
      var  s    =    "";
      if    (str.length == 0)  return "";
      s    =    str.replace(/&/g,">");
      s    =    s.replace(/</g,"<");
      s    =    s.replace(/>/g,">");
      s    =    s.replace(/ /g," ");
      s    =    s.replace(/\'/g,"'");
      s    =    s.replace(/\"/g,""");
      s    =    s.replace(/\n/g,"<br>");
    return    s;
    }
    function html_decode(str)
    {
      var    s    =    "";
      if    (str.length==0)    return    "";
      s    =    str.replace(/>/g,"&");
      s    =    s.replace(/</g,"<");
      s    =    s.replace(/>/g,">");
      s    =    s.replace(/ /g," ");
      s    =    s.replace(/'/g,"\'");
      s    =    s.replace(/"/g,"\"");
      s    =    s.replace(/<br>/g,"\n");
      return    s;
    }
  2. 用的浏览器内部转换器实现转换,方法是动态创建一个容器标签元素,如DIV,将要转换的字符串设置为这个元素的innerText,然后返回这个元素的innerHTML,即得到经过HTML编码转换的字符串。
    function html_encode(html)
    {
      return document.createElement('div')
      .appendChild(document.createTextNode(html))
      .parentNode.innerHTML;
    }
    function html_decode(html)
    {
      var a = document.createElement('div');
      a.innerHTML = html;
      return a.textContent;
    }
  这种方法有一个问题就是对于单引号'和双引号"不会进行转义处理,对于这种方法使用的时候就要非常注意了。
  比如转义,用第一种方法:
  <a href="http://owlsn.github.io/blog"></a>
  第二种方法:
  <a href="http://owlsn.github.io/blog"></a>
  虽然第二种方法看起来简洁,但是在一些特殊情况下是会出现问题的,总之我还是比较倾向于使用第一种用正则匹配的方法,根据实际情况可以自己控制需要转换的实体。