php – 将多字节字符串截断为n个字符

我试图在字符串过滤器中使用此方法:

public function truncate($string, $chars = 50, $terminator = ' …');

我期待这个

$in  = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWYXZ1234567890";
$out = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUV …";

还有这个

$in  = "âãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿĀāĂ㥹ĆćĈĉĊċČčĎďĐđĒēĔĕĖėĘęĚěĜĝ";
$out = "âãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿĀāĂ㥹ĆćĈĉĊċČčĎďĐđ …";

这是$chars减去$terminator字符串的字符.

此外,滤波器应该在$chars限制以下的第一个字边界切割,例如

$in  = "Answer to the Ultimate Question of Life, the Universe, and Everything.";
$out = "Answer to the Ultimate Question of Life, the …";

我很确定这应该适用于这些步骤

>从最大字符中减去终结符中的字符数量
>验证字符串是否超过计算的限制或不加改变地返回
>在字符串中找到计算限制以下的最后一个空格字符以获取字边界
>如果找不到最后一个空格,则在最后一个空格处剪切字符串或计算限制
>将终结符附加到字符串
>返回字符串

但是,我现在尝试了str *和mb_ *函数的各种组合,但都产生了错误的结果.这不是那么困难,所以我显然缺少一些东西.有人会为此分享一个有效的实现,或者指向一个资源,我终于可以理解如何做到这一点.

谢谢

附:是的,我之前检查过https://*.com/search?q=truncate+string+php

上一篇:php – 如何检测并回显单词中的最后一个元音?


下一篇:2021(接近2022)linux(ubuntu16.04)安装cuda跑深度学习步骤以及踩坑过程(ELF标头无效、导入torch后torch.cuda.is_available()为False等等)