为另一种字符集很复杂,确实如此,如果自己来实现的话,确实非常麻烦,但是用 PHP
来做却很容易,因为它里面已经包含这样的函数了,你可以通过 iconv 函数很容易的来
实现各种字符集之间的转化,如果你的机器上没有安装 iconv 扩展,你也可以使用
mb_convert_encoding 函数,如果 Multibyte String 扩展也没有安装,那就没办法了,
因为你要自己实现那么多种编码的转化基本上是不可能的,除非你是顶级大牛!推荐使
用 iconv,因为这个效率高,支持的字符集也更多。
做完上面那一步之后,接下来是以每两个字节为单位对字符串进行处理。这两个字节直接
转化为数字就是&#xxxxx;中的 xxxxx,如果这个数字小于 128 就直接使用这个字符
(注意这里就变成单字节了),否则就使用&#xxxxx;的形式。这里有一点要注意,就是
当这个数字是 65279(16 进制的 0x FEFF)时,请把它忽略掉,因为这个是 Unicode
编码中的传输控制字符,而我们现在的字符串已经只有 iso-8859-1 编码中的前 128 个
字符了,所以我们不需要它了。
好了,基本思路就是这样,下面是实现的程序:
以下为引用的内容:
<?php
function nochaoscode($encode, $str) {
$str = iconv($encode, "UTF-16BE", $str);
for ($i = 0; $i < strlen($str); $i++,$i++) {
$code = ord($str{$i}) * 256 + ord($str{$i + 1});
if ($code < 128) {
$output .= chr($code);
} else if ($code != 65279) {
$output .= "&#".$code.";";
}
}
return $output;
}
?>
函数的参数中,$encode 是源字符集,$str 是需要进行转化的字符串。返回结果是转化
以后字符串。