将字符串显示为最多这么多字符而不分割单词

时间:2012-02-23 20:57:11

标签: php substring

我目前正在开发一个php项目,我需要显示一个最多100个字符的字符串,但不会分割单词。

例如,如果我有字符串

  

快速的棕色狐狸跳过懒狗回来了

假设第100个角色处于'跳跃'的中间。 目前我正在使用substr($mystring, 0, 100)

然后打印

  

快速的棕色狐狸jum

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

  

快速的棕色狐狸

这是否可以修复

3 个答案:

答案 0 :(得分:5)

$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,您将需要使用multibyte等效函数。

答案 1 :(得分:1)

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

由于分隔符字符串,它有点hacky,但很简洁:

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

请注意,如果您的原始字符串包含'@@@@@',这将会中断,我将其用作唯一的分隔符,我认为它不会出现在大多数英文字符串中。随意将'@@@@@'更改为更加不稳定/独特的东西。

答案 2 :(得分:0)

//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;