Patchwork UTF-8 完整 API 清单:60+个图形簇感知函数一次讲透(附速查表)

📅 2026/8/24 17:25:27
Patchwork UTF-8 完整 API 清单:60+个图形簇感知函数一次讲透(附速查表)
Patchwork UTF-8 完整 API 清单60个图形簇感知函数一次讲透附速查表【免费下载链接】utf8Portable and performant UTF-8, Unicode and Grapheme Clusters for PHP项目地址: https://gitcode.com/gh_mirrors/ut/utf8在 PHP 项目中处理中文、emoji 等多字节字符时strlen、substr等原生字符串函数常常会数错字、切坏字。Patchwork UTF-8为 PHP 提供了一套完整、可移植、高性能的UTF-8 / Unicode / 图形簇Grapheme Clusters处理函数库一个Patchwork\Utf8类就镜像了 50 个原生字符串函数再配合土耳其语专用类、启动引导类和 mbstring/iconv/intl 兼容层累计提供 60 多个图形簇感知函数。本文将这份 API 清单按使用场景分组一次讲透并附上速查表方便你快速检索。为什么 PHP 原生字符串函数不认识中文PHP 内置的字符串函数把字符串当作字节来处理。而一个汉字在 UTF-8 里占 3 个字节emoji 占 4 个字节中这种组合字符更是由多个码点拼成一个可见字即图形簇。直接调用substr(中文, 0, 1)会得到乱码。Patchwork UTF-8 的核心思路是用与原生命名完全一致的函数但内部按图形簇计算。你几乎不需要学习新 API——把strlen换成Utf8::strlen即可参数和行为与原生函数一一对应。30 秒上手Bootup 引导与请求过滤安装composer 环境后只需在应用启动早期调用引导类即可开启兼容层并配置好 UTF-8 环境源码位于src/Patchwork/Utf8/Bootup.phpBootup::initAll()—— 一键启用 mbstring / iconv / intl 纯 PHP 兼容层并配置 PHP 为 UTF-8Bootup::filterRequestUri()—— URL 非 UTF-8 时自动重定向到 UTF-8 编码版本Bootup::filterRequestInputs()—— 将 HTTP 输入统一规范化为 UTF-8 NFC。这三步做完后续的 60 个函数即可安全使用。60 函数速查表按场景分组以下函数均位于src/Patchwork/Utf8.php中的Patchwork\Utf8类全部为静态方法直接Utf8::函数名()调用即可。1️⃣ 环境搭建与字符串体检4 个函数作用长尾场景isUtf8()判断字符串是否为合法 UTF-8 编码入库前防乱码必备filter()规范化为 UTF-8 NFC可自动从 CP-1252 转换toAscii()将 UTF-8 转写为纯 ASCII如 café → cafewrapPath()Windows 及其他系统下的 Unicode 文件路径访问封装2️⃣ 无差别匹配与终端显示3 个函数作用strtocasefold()Unicode 大小写折叠用于无视大小写的精确比对strtonatfold()大小写敏感的自然排序比对转换strwidth()计算字符串在终端打印时的显示宽度中文算 2 格3️⃣ 输入与编解码5 个函数作用filter_input()按图形簇感知的filter_input镜像版filter_input_array()批量过滤 HTTP 输入数组json_decode()自动处理带 BOM 或编码异常的 JSON 字符串utf8_encode()/utf8_decode()UTF-8 与 CP-1252 双向转换原生函数已废弃这是替代方案4️⃣ 长度、定位与截取12 个最常用函数对应原生一句话说明strlen()strlen按可见字符数长度中文 emoji 不再数错strpos()/stripos()strpos查找子串位置不区分大小写版自动做 Unicode 折叠strrpos()/strripos()strrpos从末尾查找子串位置strstr()/stristr()strstr返回命中位置及其后的全部内容strrchr()/strrichr()strrchr返回最后一次命中及其后内容substr()substr安全截取 UTF-8 子串绝不切出半个汉字5️⃣ 修剪、替换与重组13 个函数对应原生一句话说明ltrim()/rtrim()/trim()同名按图形簇修剪首尾空白或指定字符substr_compare()substr_compare比较两个字符串的部分片段substr_count()substr_count统计子串出现次数substr_replace()substr_replace在任意位置替换片段str_split()str_split按字符数安全拆分不会劈开多字节字符strcspn()/strspn()同名计算不在/在字符集中的连续长度strpbrk()strpbrk返回字符集中首个出现的字符位置strtr()strtr批量字符映射替换str_shuffle()str_shuffle按图形簇打乱emoji 组合不会被拆散strrev()strrev安全反转字符串str_pad()str_pad按显示宽度补白中文对齐不再错位wordwrap()wordwrap按图形簇宽度自动折行str_word_count()str_word_count统计单词数6️⃣ 大小写与字符级操作7 个函数对应原生一句话说明strtolower()/strtoupper()同名基于 Unicode 的大小写转换含多字符转换如德语 ß → SSucfirst()/lcfirst()同名首字符转大写/小写ucwords()ucwords每个单词首字母大写str_ireplace()str_ireplace不区分大小写的 Unicode 替换chr()chr码点转 UTF-8 字符ord()ordUTF-8 字符转码点count_chars()count_chars按码点统计字符分布7️⃣ 比较与格式化8 个函数对应原生一句话说明strcmp()/strnatcmp()同名字节序比较 / 自然排序比较strcasecmp()/strnatcasecmp()同名忽略大小写的两种比较strncmp()/strncasecmp()同名限定长度的比较number_format()number_format数字本地化格式化图形簇感知分隔符 小技巧几乎所有函数名都能与 PHP 原生函数对号入座迁移老代码时只需把全局函数名加一个Utf8::前缀即可。土耳其语大小写的专门方案TurkishUtf8普通strtolower(I)会得到i但在土耳其语中İ的小写是ı无点 i这是国际开发中最经典的坑。Patchwork\TurkishUtf8源码位于src/Patchwork/TurkishUtf8.php完整克隆了Patchwork\Utf8的全部功能并重写了strtolower、strtoupper、ucfirst、ucwords、str_ireplace、stripos等 10 个大小写相关函数以适配土耳其语规则。做国际化产品时建议根据用户区域动态二选一。兼容层mbstring / iconv / intl 没装也不怕除了 60 个类方法本库还内置纯 PHP 实现的移植层当服务器缺少扩展时自动兜底源码在src/Patchwork/PHP/Shim/目录mbstringmb_strlen、mb_substr、mb_strpos、mb_convert_encoding等 30 个函数见src/Patchwork/PHP/Shim/Mbstring.phpiconviconv、iconv_strlen、iconv_mime_decode等见src/Patchwork/PHP/Shim/Iconv.phpintlNormalizer规范化类与grapheme_*函数族见src/Patchwork/PHP/Shim/Intl.php顶层入口为src/Normalizer.phputf8_encode / utf8_decodePHP 8.2 起原生函数被废弃这里提供永久替代。这意味着你的应用即使在裸 PHP服务器上也能正确跑中文。核心文件路径索引主函数库src/Patchwork/Utf8.php土耳其语扩展src/Patchwork/TurkishUtf8.php启动引导src/Patchwork/Utf8/Bootup.php兼容性层src/Patchwork/PHP/Shim/最佳拟合转换表UTF-8 → 代码页src/Patchwork/Utf8/data/测试用例可当文档读tests/Utf8/、tests/PHP/Shim/打包配置composer.json包名patchwork/utf8Apache-2.0 / GPL-2.0 双许可常见问题FAQQ1必须安装 mbstring 或 intl 扩展吗不需要。只要pcre带 Unicode 支持绝大多数环境默认满足本库纯 PHP 实现即可完整工作。Q2strlen和mb_strlen我该用哪个推荐统一走Utf8::strlen风格。它优先复用原生扩展有扩展时性能最佳无扩展时自动降级行为在所有服务器上一致。Q3图形簇Grapheme Cluster到底是什么它是用户眼中看到一个字符的最小单元例如 emoji 国旗 由两个区域指示符组成、e 组合重音 也是两个码点。本库全部函数都按图形簇而非字节/码点计算这正是它区别于普通多字节处理的关键。Q4如何验证我的环境配置正确先跑Bootup::initAll()再用Utf8::isUtf8()抽查一段来自外部的字符串最后用Utf8::strlen(中文测试)应得到 4 而不是 12 字节。小结Patchwork UTF-8 的价值一句话概括一套与原生命名零差异、图形簇感知、不挑服务器环境的 PHP 字符串函数库。上文速查表覆盖 55 个核心镜像函数 Bootup 引导 3 个 土耳其语重写 10 个 兼容层 30 个函数总计 60 余个。建议收藏本文遇到中文被切坏、emoji 数错、大小写不灵时直接按分组查表即可。【免费下载链接】utf8Portable and performant UTF-8, Unicode and Grapheme Clusters for PHP项目地址: https://gitcode.com/gh_mirrors/ut/utf8创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考