PHP实现UTF-8转Unicode编码函数的方法

一只小鹿
一只小鹿
发布时间:2026-10-14| 5人浏览过
原创

在处理Web数据交互时,经常需要将UTF-8编码的中文或其他多字节字符转换为Unicode编码(如\u4e2d)。这对于确保跨平台兼容性、特别是在某些前端框架或API中至关重要。下面提供一个经过测试的PHP函数实现,它能够准确地将UTF-8字符串转换为Unicode编码。

功能目标与准备

我们的目标是编写一个PHP函数 utf8_unicode($str),输入一个UTF-8编码的字符串,输出其对应的Unicode转义序列字符串。例如,输入“中”,输出“\u4e2d”。对于ASCII字符(字母、数字、常见符号),函数将保持原样或进行适当的URL编码处理。

第1步:了解UTF-8编码特性

UTF-8是一种变长编码,1到4个字节表示一个字符。单字节字符(0x00-0x7F)直接对应ASCII;双字节以0xC2-0xDF开头;三字节以0xE0开头;四字节以0xF0开头。本函数主要处理前三种情况,这是日常开发中最常见的。

第2步:核心转换逻辑

函数通过遍历字符串的每个字节来判断字符类型:
1. 如果是小于 'A' (0x41) 的单字节且非ASCII标准范围(如控制字符),则转为 %hex 格式。
2. 如果是数字 (0-9),直接保留。
3. 如果是标准ASCII字母/符号 (0x41-0x7F),直接保留。
4. 如果是多字节字符的前缀,根据首字节判断后续需要的字节数(2个或3个)。
5. 收集完所有组成字节后,计算其数值并转换为十六进制,加上 \u 前缀。

复制代码 代码如下:
public function utf8_unicode($str) {
    $unicode = array();
    $values = array();
    $lookingFor = 1;
    for ($i = 0; $i < strlen( $str ); $i++ ) {
        $thisValue = ord( $str[ $i ] );
        if ( $thisValue < ord('A') ) {
            // exclude 0-9
            if ($thisValue >= ord('0') && $thisValue <= ord('9')) {
                // number
                $unicode[] = chr($thisValue);
            }
            else {
                $unicode[] = '%'.dechex($thisValue);
            }
        } else {
            if ( $thisValue < 128) {
                $unicode[] = $str[ $i ];
            } else {
                if ( count( $values ) == 0 ) {
                    $lookingFor = ( $thisValue < 224 ) ? 2 : 3;
                }
                $values[] = $thisValue;
                if ( count( $values ) == $lookingFor ) {
                    $number = ( $lookingFor == 3 ) ?
                        ( ( $values[0] % 16 ) * 4096 ) + ( ( $values[1] % 64 ) * 64 ) + ( $values[2] % 64 ):
                        ( ( $values[0] % 32 ) * 64 ) + ( $values[1] % 64 );
                    $number = dechex($number);
                    $unicode[] = (strlen($number)==3)?"\u0".$number:"\u".$number;
                    $values = array();
                    $lookingFor = 1;
                } // if
            } // if
        }
    } // for
    return implode("",$unicode);
}

使用注意事项

  • 类封装: 上述代码为类成员函数形式 (public function)。如果你需要在普通脚本中使用,请去掉 public 关键字,并确保变量作用域正确。
  • 字符集支持: 此函数主要针对基本多文种平面(BMP)内的字符(最多3字节UTF-8)。如果遇到Emoji等需要4字节UTF-8的字符,此函数可能无法完全覆盖,需额外扩展逻辑。
  • 性能考量: 对于极长的字符串,由于涉及频繁的数组操作和字符串连接,性能可能略低于内置的 json_encode (配合 JSON_UNESCAPED_UNICODE 标志)。但在特定格式化需求下,此自定义函数提供了更细粒度的控制。

完成判断

调用此函数后,返回的字符串应包含所有中文或多字节字符的 Unicode 转义序列(如 \u4e2d\u6587),而英文和数字保持不变。你可以将其用于构建符合特定要求的 JSON 对象或前端显示字符串。

以上就是PHP实现UTF-8转Unicode编码函数的详细内容,更多关于PHP字符编码转换的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。