class Coder
{
public static function ascii2unicode($c)
{
$len = strlen($c);
$a = 0;
$unicode = "";
while ($a < $len) {
$ud = 0;
if (ord($c[$a]) < 128) {
// 单字节字符(ASCII码范围)
$ud = ord($c[$a]);
$a += 1;
} else if (ord($c[$a]) < 224) {
// 双字节字符
$ud = (ord($c[$a]) & 0x1F) << 6 | (ord($c[$a + 1]) & 0x3F);
$a += 2;
} else if (ord($c[$a]) < 240) {
// 三字节字符
$ud = (ord($c[$a]) & 0x0F) << 12 | (ord($c[$a + 1]) & 0x3F) << 6 | (ord($c[$a + 2]) & 0x3F);
$a += 3;
} else if (ord($c[$a]) < 248) {
// 四字节字符
$ud = (ord($c[$a]) & 0x07) << 18 | (ord($c[$a + 1]) & 0x3F) << 12 | (ord($c[$a + 2]) & 0x3F) << 6 | (ord($c[$a + 3]) & 0x3F);
$a += 4;
} else if (ord($c[$a]) < 252) {
// 五字节字符
$ud = (ord($c[$a]) & 0x03) << 24 | (ord($c[$a + 1]) & 0x3F) << 18 | (ord($c[$a + 2]) & 0x3F) << 12 | (ord($c[$a + 3]) & 0x3F) << 6 | (ord($c[$a + 4]) & 0x3F);
$a += 5;
} else if (ord($c[$a]) < 254) {
// 六字节字符
$ud = (ord($c[$a]) & 0x01) << 30 | (ord($c[$a + 1]) & 0x3F) << 24 | (ord($c[$a + 2]) & 0x3F) << 18 | (ord($c[$a + 3]) & 0x3F) << 12 | (ord($c[$a + 4]) & 0x3F) << 6 | (ord($c[$a + 5]) & 0x3F);
$a += 6;
} else {
// 错误的字节,跳过
$a += 1;
}
$unicode .= "&#{$ud};";
}
return $unicode;
}
}
/**
* 将 ASCII 码转为字符串
* @param string $str 要解码的字符串
* @param string $prefix 前缀,默认:&#
* @return string
*/
function decode($str, $prefix = "&#")
{
$str = str_replace($prefix, "", $str);
$a = explode(";", $str);
$utf = "";
foreach ($a as $dec) {
if ($dec < 128) {
$utf .= chr((int) $dec);
} else if ($dec < 2048) {
$utf .= chr(192 + (($dec - ($dec % 64)) / 64));
$utf .= chr(128 + ($dec % 64));
} else {
$utf .= chr(224 + (($dec - ($dec % 4096)) / 4096));
$utf .= chr(128 + ((($dec % 4096) - ($dec % 64)) / 64));
$utf .= chr(128 + ($dec % 64));
}
}
return $utf;
}
// 要转换的 ASCII 字符
$asciiString = "Hello, world!";
// 转换为 Unicode 编码
$unicode = Coder::ascii2unicode($asciiString);
echo $unicode; // 输出:Hello, world!
// 将 Unicode 编码转换回字符串
$decodedString = decode($unicode);
echo $decodedString; // 输出:Hello, world!
不是网上不能用的那种,有类似的,但是不一定能直接运行,这个可以直接运行没问题。
如果在网页上看效果就必须查看源码方式,否则看结果都是一样的输出,命令行或者接口一般都可以正常看到效果,如果你发现输出结果一样,那就对了,肯定没错,就是你的查看方式不对