您的位置:首页 > Web前端 > HTML

特殊字符的html编码转化

2009-02-16 16:20 369 查看
采集的数据中,原来是日文的"ブリーチ, 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以上。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: