【问题标题】:Best practices for dealing with UTF-8 and Unicode in PHP 8 [closed]在 PHP 8 中处理 UTF-8 和 Unicode 的最佳实践 [关闭]
【发布时间】: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 即可。否则,大多数字符串函数会在特定语言的特定情况下引起问题(语言太多,规则太多)。幸运的是,没有人需要为所有语言构建一个通用站点(最好为某些特定的家庭提供不同的站点,这也是因为整体设计和可读性)。
  • 我认为人们应该经常问自己的问题是“我现在对什么抽象级别感兴趣?”例如,“这个字符串的长度是多少?”有很多不同的答案; strlenmb_strlengrapheme_strlen 都会为您提供不同但同样有效的答案。同样,substr 是一个常见示例,但您真的多久想要“前 20 个 Unicode 代码点,即使结果没有视觉意义”而不是“前 20 个视觉字符(字形)”,甚至“最多 20 个字节而不分割一个字形”。

标签: php unicode utf-8 php-8


【解决方案1】:

开发人员需要知道what UTF-8 really is,然后才能在程序中使用它。

只有这样,您才会明白为什么在无需完全重写该语言的情况下,任何编程语言都无法让事情变得更好。所以 UTF-8 和 PHP 没有什么特别的关系。

与其他 Unicode 编码方案相比,UTF-8 具有向后兼容 US-ASCII 和自同步的优势。由于向后兼容,many of PHP's SBCS functions will also work with MBCS strings.

为了回答这个问题,PHP 8 没有太大变化,除了默认编码是自 PHP 5.6 以来的 UTF-8。这篇文章仍然适用。您需要扩展才能使用多字节编码,并且您需要考虑不同数据源的编码方案,例如您正在使用的数据库,这对于所有编程语言都是通用的。

【讨论】:

    猜你喜欢
    • 2014-08-21
    • 2012-06-22
    • 2015-04-13
    • 2012-08-30
    • 1970-01-01
    • 2012-07-15
    • 2013-08-23
    • 2014-11-28
    • 2015-04-29
    相关资源
    最近更新 更多