html实体与网页编码

林继 VPS 知识 6,004 共写了1344个字 (2005-12-20 19:25:23) 没有评论 打印 扫描二维码 百度已收录

From:http://www.ugia.cn/?p=72

     最近在解析一个天气预报的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 i = 1 to Len(str)
char = mid(str, i, 1)
If Ascw(char) > 128 then
htmlentities = htmlentities & “&#” & Ascw(char) & “;”
Else
htmlentities = htmlentities & char
End if
Next
End Function

Coldfusion版本的:

function nochaoscode(str)
{
var new_str = “”;
for(i=1; i lte len(str);i=i+1){
if(asc(mid(str,i,1)) lt 128){
new_str = new_str & mid(str,i,1);
}else{
new_str = new_str & “&##” & asc(mid(str,i,1));
}
}
return new_str;
}

实体引用与字符引用

纠正这篇文章《html实体与网页编码》里的一个概念性错误,在这篇文章里我所要转化成的其实是十进制的字符引用。
所谓实体引用就是引用已命名的实体,如:& nbsp; & copy;等。xhtml中有大量的已命名实体,如http://msdn.microsoft.com/workshop/author/dhtml/reference/charsets/charset3.asp?frame=true所列出的。xml中可以在dtd中自己定义。
字符引用使用十六进制或十进制Unicode值来引用特定字符,而不使用名称。字符引用每次引用一个字符。例如:&# xA0;是一个十六进制字符引用,引用空格字符。&# 160;是一个十进制字符引用,引用空格字符。

如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!

发表评论

电子邮件地址不会被公开。 必填项已用*标注

< >