php里ascii编码怎么转unicode编码?输出“&#”格式

文章介绍了classCoder中的两个函数,ascii2unicode用于将ASCII码转换为Unicode编码,decode则用于将Unicode编码解码回字符串。示例展示了如何使用这两个函数进行字符编码和解码的过程。
摘要由CSDN通过智能技术生成
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; // 输出:&#72;&#101;&#108;&#108;&#111;&#44;&#32;&#119;&#111;&#114;&#108;&#100;&#33;

// 将 Unicode 编码转换回字符串
$decodedString = decode($unicode);
echo $decodedString; // 输出:Hello, world!

不是网上不能用的那种,有类似的,但是不一定能直接运行,这个可以直接运行没问题。

如果在网页上看效果就必须查看源码方式,否则看结果都是一样的输出,命令行或者接口一般都可以正常看到效果,如果你发现输出结果一样,那就对了,肯定没错,就是你的查看方式不对

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值