background image

为另一种字符集很复杂,确实如此,如果自己来实现的话,确实非常麻烦,但是用 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 是需要进行转化的字符串。返回结果是转化

以后字符串。