Mic*_*rdt 11
编辑: S.Mark的答案实际上比我的好 - PHP有一个(记录严重的)内置函数,可以解决这个问题.
原始的"回到位"答案如下:
这可以确保您没有在末尾悬挂不完整的字符,这是截断UTF-8时可能出错的主要问题.
不幸的是(正如安德鲁在评论中提醒我的那样),也有两个单独编码的Unicode代码点形成单个字符的情况(基本上,重音符号等变音符号可以表示为修改前一个字母的单独代码点).
处理这种事情需要高级的Unicode-Fu,这在PHP中是不可用的,甚至可能不适用于所有情况(那里有很多奇怪的脚本!),但幸运的是它相对罕见,至少对于基于拉丁语的语言.
我认为你不需要重新发明轮子,你可以使用mb_strcut并确保首先将编码设置为UTF-8.
mb_internal_encoding('UTF-8');
echo mb_strcut("\xc2\x80\xc2\x80", 0, 3); //from index 0, cut 3 characters.
Run Code Online (Sandbox Code Playgroud)
它的回归
\xc2\x80
Run Code Online (Sandbox Code Playgroud)
因为在\ xc2\x80\xc2中,最后一个无效