特殊字符的html编码转化

本文介绍了如何使用PHP处理HTML中的特殊字符,特别是日文字符的实体转换方法。通过使用html_entity_decode函数,并指定正确的编码集(如UTF-8),可以有效解决网页中日文显示的问题。此外,还提供了.NET环境下将特定字符转换为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以上。

转载于:https://www.cnblogs.com/xin478/archive/2009/02/16/1391708.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值