【发布时间】:2021-09-26 18:12:35
【问题描述】:
处理 Unicode 和 UTF-8 多年来一直有 been a nightmare in PHP,但我一直希望 PHP 8 会变得更好。是吗?
使用 PHP 8 的开发人员在接收、处理、存储和返回 UTF-8 内容时必须考虑哪些事项?
我知道UTF-8 all the way through,但有多少建议仍然适用于 PHP 8?有没有新的更好的方法来处理 PHP 中的 Unicode?标准字符串函数现在 UTF-8 安全吗?
【问题讨论】:
-
这太宽泛了,太固执了,而且问题太多了,这不是一个好的堆栈溢出问题。如果您要解决某个问题,请尝试专注于该问题。如果没有,最好尝试不同的论坛,例如 PHP subreddit?
-
这也取决于你所说的“交易”是什么意思。在大多数情况下,只需将字符串归一化并将其视为二进制 blob 即可。否则,大多数字符串函数会在特定语言的特定情况下引起问题(语言太多,规则太多)。幸运的是,没有人需要为所有语言构建一个通用站点(最好为某些特定的家庭提供不同的站点,这也是因为整体设计和可读性)。
-
我认为人们应该经常问自己的问题是“我现在对什么抽象级别感兴趣?”例如,“这个字符串的长度是多少?”有很多不同的答案;
strlen、mb_strlen和grapheme_strlen都会为您提供不同但同样有效的答案。同样,substr是一个常见示例,但您真的多久想要“前 20 个 Unicode 代码点,即使结果没有视觉意义”而不是“前 20 个视觉字符(字形)”,甚至“最多 20 个字节而不分割一个字形”。