特殊字符的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以上。

你可能感兴趣的:(html)