公告板
预览模式: 普通 | 列表

html实体转换[转]

Html entity encoder/decoder Detail refer to http://andrewu.co.uk/clj/entityencode/.


  1. function TextToEntities(strPlainText, blnPartialEncodeOnly) {
  2.  var strPartial = [];
  3.  var strFull = [];
  4.  var intP = 0;
  5.  var intF = 0;
  6.  var objPartialRegExp = (new RegExp).compile("[\\w\\s]");
  7.  
  8.  for (var intI=0; intI<strPlainText.length; ++intI) {
  9.  var strChar = strPlainText.charAt(intI);
  10.  var intChar = strChar.charCodeAt(0);
  11.  
  12.  if (isNaN(intChar)) {
  13.  // IF CHAR FAILED TO DECODE, LEAVE AS CHAR
  14.  strPartial.push(strFull.push(strChar));
  15.  }
  16.  else {
  17.  var strEntity = "&#" + intChar + ";";
  18.  strFull.push(strEntity);
  19.  // IF CHAR WAS [a-zA-Z0-9_ \t] LEAVE AS CHAR, ELSE REPLACE WITH ENTITY
  20.  strPartial.push(objPartialRegExp.test(strChar) ? strChar : strEntity);
  21.  }
  22.  }
  23.  return (blnPartialEncodeOnly ? strPartial.join("") : strFull.join(""));
  24.  }
  25.  
  26.  function EntitiesToText(strEncodedText) {
  27.  var strData = String(strEncodedText);
  28.  var objRegExp = (new RegExp).compile("&#(\\d+);", "ig");
  29.  
  30.  /**//* FOR EACH MATCH TO ANY ENTITY, REPLACE THAT
  31.  ENTITY GLOBALLY WITH ITS SINGLE CHAR EQUIVALENT */
  32.  while(strData.match(objRegExp)) {
  33.  var strCharMatch = RegExp.$1;
  34.  var objRegExpMatch = new RegExp("&#" + strCharMatch + ";", "ig");
  35.  strData = strData.replace(objRegExpMatch, String.fromCharCode(strCharMatch));
  36.  }
  37.  return strData;
  38.  }


最近在解析一个天气预报的xml文件时,发现它里面所有的汉字都转化为了html实体(十进制表示的Unicode编码),这样做的好处就是不管网页的编码是什么,都可以正常的显示汉字,而不会出现乱码,当然也适用于其他字符集。在php中我们可以用mbstring的mb_convert_encoding函数实现这个正向及反向的转化。
如:

mb_convert_encoding ("你好""HTML-ENTITIES""gb2312");    //输出:&#20320;&#22909;
mb_convert_encoding ("&#20320;&#22909;""gb2312""HTML-ENTITIES");    //输出:你好 

可以查看这个页面:htmlentities.html, 不管选择什么网页编码,网页都能正常显示。

如果需要对整个页面转化,则只需要在php文件的头部加上这三行代码:

mb_internal_encoding("gb2312");  // 这里的gb2312是你网站原来的编码
mb_http_output("HTML-ENTITIES");
ob_start('mb_output_handler'); 

如果没有打开mbstring扩展,可以参考coolcode.cn上的这两篇文章:
在任意字符集下正常显示网页的方法
在任意字符集下正常显示网页的方法(续)

在asp中我们可以用下面这个函数来实现这个转化:

Function htmlentities(str)
    For 
1 to Len(str)
        
char mid(stri1)
        If 
AscW(char) > 0 then
            htmlentities 
htmlentities "&#" Ascw(char) & ";"
        
Else
            
htmlentities htmlentities "&#" & (65536 ascW(char)) & ";"
        
End if
    
Next
End 
Function 
  • 1 
·此地為某只的個人YY之地,言論僅代表自己的個人觀點,和現實、社會、政治完全沒關係,沒事請不要在此惹事生非。
·若要轉載本blog内容請註明轉載地址和作者名字,禁止無權轉載/盜鏈等無恥行爲。
·如有轉載侵權請聯系刪除。
·謝謝合作。^_^