当前位置: 首页 > 面试题库 >

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

罗伟兆
2023-03-14
问题内容

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

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_*函数的各种组合,但是都产生了错误的结果。这不是那么困难,所以我显然缺少了一些东西。有人会为此共享一个可行的实施方案,
还是 将我指向一个资源,使我最终能够理解如何做到这一点。

谢谢


问题答案:

尝试这个:

function truncate($string, $chars = 50, $terminator = ' …') {
    $cutPos = $chars - mb_strlen($terminator);
    $boundaryPos = mb_strrpos(mb_substr($string, 0, mb_strpos($string, ' ', $cutPos)), ' ');
    return mb_substr($string, 0, $boundaryPos === false ? $cutPos : $boundaryPos) . $terminator;
}

但是您需要确保正确设置内部编码。



 类似资料:
  • 如何将字符串(字节字符串)转换为字节(字节字符串),而不必手动复制和粘贴字符串并在其前面放置b?

  • 根据指定的长度截断字符串。 确定字符串的 length 是否大于 num。 返回截断所需长度的字符串,用 '...' 附加到结尾或原始字符串。 const truncateString = (str, num) => str.length > num ? str.slice(0, num > 3 ? num - 3 : num) + '...' : str; truncateString('

  • 问题内容: 如何在Python中将字符串截断为75个字符? 这是用JavaScript完成的方式: 问题答案:

  • 问题内容: 我想在GO中将字符串数组转换为字节数组,以便可以将其写到磁盘上。将字符串数组()解码为字节数组()的最佳解决方案是什么? 我正在考虑对字符串数组进行两次迭代,第一个迭代以获得字节数组所需的实际大小,然后第二个迭代写入每个元素的长度和实际字符串()。 解决方案必须能够以其他方式进行转换;从一个到一个。 问题答案: 让我们忽略一个事实,那就是走一秒钟。您需要做的第一件事是将序列化格式编组为

  • 本文向大家介绍VBA 将多字节字符的字节数组隐式转换为字符串,包括了VBA 将多字节字符的字节数组隐式转换为字符串的使用技巧和注意事项,需要的朋友参考一下 示例            

  • 问题内容: 在Java中将字符串拆分为1024个字节的块的有效方法是什么?如果有多个块,则需要在所有后续块中重复标头(固定大小的字符串)。 问题答案: 字符串和字节是完全不同的两件事,因此要将字符串拆分为字节与将绘画拆分为经文一样没有意义。 您实际上想做什么? 要在字符串和字节之间进行转换,您需要指定一种编码,该编码可以对String中的所有字符进行编码。根据编码和字符,其中一些可能跨越一个以上的