在不拆分单词的情况下,最多显示这么多字符的字符串


Display string to a maximum of so many characters without splitting word

我目前正在处理一个php项目,在该项目中,我需要显示最多100个字符的字符串,但不需要拆分单词。

例如,如果我有字符串

敏捷的棕色狐狸从后面的懒狗身上跳了过去

假设第100个字符位于"跳跃"的中间。目前我正在使用substr($mystring, 0, 100)

然后将打印

快速棕色狐狸jum

相反,在这种情况下,我想打印

快速棕色狐狸

这是否可以修复

$string = 'The quick brown fox jumped over the lazy dogs back';
$maxLength = 20;
if (strlen($string) > $maxLength) {
    $stringCut = substr($string, 0, $maxLength);
    $string = substr($stringCut, 0, strrpos($stringCut, ' ')); 
}
echo $string;
// output: The quick brown fox

关键是使用strrpos在空格处截断,而不是在单词的中间。

注意:如果这些字符串的源使用多字节字符集,例如UTF-8,则需要使用多字节等效函数。

PHP的wordwrap()函数可以提供帮助。http://php.net/manual/en/function.wordwrap.php

由于分隔符字符串的原因,它有点粗糙,但很简洁:

$str2 = wordwrap($str,20,'@@@@@');
$str_final = substr($str2,0,strpos($str2,'@@@@@'));

请注意,如果您的原始字符串包含"@@@@@",这将中断,我将其用作唯一的分隔符,我认为大多数英语字符串中都不会出现这种分隔符。请随意将"@@@@@"更改为更古怪/独特的内容。

//Set up -  we need 100 characters
$s="The quick brown fox jumped over the lazy dogs back";
$s="$s. $s. s.";
//Cut
$t=substr($s,0,100);
//Trim
$u=preg_replace('/^(.*).'s'w*$/','${1}',$t);
//Output
echo $u;