特殊字符的html编码转化

 采集的数据中,原来是日文的"ブリーチ, Burīchi",html代码中是ブリーチ, Burīchi,这样做有个好处,网页就不一定要像UTF-8这样的编码,但是想要原来的文字,php转半天过不来,后来发现是未指定编码集,用

html_entity_decode("ブリーチ, Burīchi",ENT_NOQUOTES,'UTF-8')


就可以了。
其实,原理也很简单,这个是模拟这个函数的功能,PHP4的话,就一定要用了

function unhtmlentities($string
{
 
// replace numeric entities
 $string = preg_replace('/([0-9a-f]+);/ei', 'uchr(hexdec("\\1"))', $string);
 
$string = preg_replace('/&#([0-9]+);/e', 'uchr("\\1")', $string);
 
// replace literal entities
 $trans_tbl = get_html_translation_table(HTML_ENTITIES);
 
$trans_tbl = array_flip($trans_tbl);
 
return strtr($string, $trans_tbl);
}

function uchr ($codes) {
 
if (is_scalar($codes)) $codes= func_get_args();
 
$str= '';
 
foreach ($codes as $code$str.= html_entity_decode('&#'.$code.';',ENT_NOQUOTES,'UTF-8');
 
return $str;
}
unhtmlentities(
"ブリーチ, Burīchi");



用.net实现下编码

   Byte[] bComments = Encoding.UTF8.GetBytes("一ンブル????中文");
   
char[] cComments = Encoding.UTF8.GetChars(bComments);
   
   StringBuilder charBuilder 
= new StringBuilder();   
   
foreach(char c in cComments)
   {
    
if(c > '\u0800')
    {
     charBuilder.Append(
"&#");
     charBuilder.Append((
int)c);
    } 
    
else
    {
     charBuilder.Append(c);
    }
   }
   Response.Write(charBuilder.ToString());



这段代码的作用是将所有的中文、韩文、日文字符通过硬编码输出成为html实体。而Html实体是不受ResponseEncoding和页面编码集影响的。

说明:

\u0800 以上的为中、韩、日字符。

中文的范围:\u4e00 - \u9fa5,日文在\u0800 - \u4e00,韩文为\u9fa5以上。

posted @ 2009-02-16 16:20  xin478  阅读(1272)  评论(0编辑  收藏  举报