在PHP 文档中列出了在字节级别上工作的字符串函数。这适用于 SBCS 字符串,但不适用于 MBCS 字符串。幸运的是,一种著名的 UTF-8 编码向后兼容最多 7 位 US-ASCII。
自 PHP 5.6 起,默认编码已更改为 UTF-8,但它的字符串函数没有。众所周知的替代品是iconv、Multibyte String和Intl。当以正确的方式编译时,PCRE 函数也可以兼容 MBCS。
当需要将 SBCS 年龄代码转换为符合 VMBCS (UTF-8) 标准时,需要重写标准 PHP 字节字符串函数以保证 MBCS 安全。尽管最基本的函数 (like strpos()
) 有一个mb_*
变体 (like mb_strpos()
),但 PHP 的大多数字符串函数都没有mb_
对应的。为了继续使用,它们必须被重写。
在第一阶段,需要确定哪些 SBCS 字符串函数可以工作,尽管它们是面向字节的。有些已经在 SO 上确定,我现在正在寻找的是一个完整的函数列表,这些函数可以与 UTF-8 一起使用,或者在谨慎使用时,例如仅使用 US-ASCII 的参数。澄清一下,问题不在于chr()
or之类的字节字符串函数crc32()
,而是关于获取函数列表,例如:
- 不安全:
count_chars()
计算字节数,... - 注意:
ltrim()
只要参数是 US-ASCII 就可以工作,... - 安全:
str_repeat()
将与 MBCS 字符串一起使用,...
有人知道这样的清单吗?