gpt4 book ai didi

php - 截断 UTF-8 字符串以适应 PHP 中给定的字节数

转载 作者:可可西里 更新时间:2023-11-01 13:06:17 25 4
gpt4 key购买 nike

假设我们有一个 UTF-8 字符串 $s 并且我们需要缩短它以便它可以存储在 N 字节中。盲目地将其截断为 N 字节可能会把它搞砸。但是解码它以找到字符边界是一个拖累。有什么整洁的方法吗?

[编辑 20100414] 除了 S.Mark 的回答:mb_strcut(),我最近发现了另一个函数来完成这项工作:grapheme_extract( $s, $n, GRAPHEME_EXTR_MAXBYTES); 来自 intl 扩展。由于 intl 是 ICU 包装器,我对它很有信心。

最佳答案

编辑:S.Mark 的回答实际上比我的好 - PHP 有一个(记录不完整的)内置函数可以解决这个问题。

原始的“回到位”答案如下:

  • 截断到所需的字节数
  • 如果最后一个字节以 110(二进制)开头,也将其删除
  • 如果倒数第二个字节以 1110(二进制)开头,则删除最后 2 个字节
  • 如果倒数第三个字节以 11110(二进制)开头,则删除最后 3 个字节

这确保您没有 incomplete character悬在最后,这是截断 UTF-8 时可能出错的主要问题。

不幸的是(正如安德鲁在评论中提醒我的那样)也有两个单独编码的 Unicode 代码点形成单个字符的情况(基本上,重音符号等变音符号可以表示为修改前一个字母的单独代码点)。

处理这种事情需要高级的 Unicode-Fu,这在 PHP 中不可用,甚至可能无法在所有情况下使用(那里有一些奇怪的脚本!),但幸运的是它相对很少见,至少对于基于拉丁语的语言而言是这样。

关于php - 截断 UTF-8 字符串以适应 PHP 中给定的字节数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1967540/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com