关于字符串:如何在PHP中切断一定数量字符后的文本?

How do you cut off text after a certain amount of characters in PHP?

我有两个字符串,比如说前25个字符。有没有办法在第25个字符后剪掉文本并添加…到绳子的末端?

所以"12345678901234567890abcdefg"会变成"12345678901234567890ABCDE…",其中"fg"被切断。


我可以修改一下帕兰的密码吗?

1
$truncated = (strlen($string) > 20) ? substr($string, 0, 20) . '...' : $string;

如果较短,则不会添加"…"。


为了避免在一个单词中间直接剪切,您可能需要尝试wordwrap函数;我想,这样的函数可以做到:

1
2
3
4
5
6
7
8
9
10
$str ="this is a long string that should be cut in the middle of the first 'that'";
$wrapped = wordwrap($str, 25);
var_dump($wrapped);

$lines = explode("
"
, $wrapped);
var_dump($lines);

$new_str = $lines[0] . '...';
var_dump($new_str);

$wrapped将包含:

1
2
3
4
string 'this is a long string
that should be cut in the
middle of the first
'
that'' (length=74)

$lines数组如下:

1
2
3
4
5
array
  0 => string 'this is a long string' (length=21)
  1 => string 'that should be cut in the' (length=25)
  2 => string 'middle of the first' (length=19)
  3 => string ''that'' (length=6)

最后,你的$new_string是:

1
string 'this is a long string' (length=21)

使用一个substr,如下所示:

1
var_dump(substr($str, 0, 25) . '...');

你会得到:

1
string 'this is a long string tha...' (length=28)

看起来不太好:-(

不过,玩得开心!


真的很快,

1
$truncated = substr('12345678901234567890abcdefg', 0, 20) . '...'


这个词很短,考虑到单词边界,它不使用循环,这使得它非常有效

1
2
3
4
5
function truncate($str, $chars, $end = '...') {
    if (strlen($str) <= $chars) return $str;
    $new = substr($str, 0, $chars + 1);
    return substr($new, 0, strrpos($new, ' ')) . $end;
}

用途:

1
truncate('My string', 5); //returns: My...

http://php.net/manual/en/function.mb-strimwidth.php(php 4>=4.0.6,php 5,php 7)

1
2
3
4
5
<?php
echo mb_strimwidth("Hello World", 0, 10,"...");
echo"<br />";
echo mb_strimwidth("Hello", 0, 10,"...");
?>

输出:

1
2
Hello W...
Hello

1
2
3
4
5
6
$words=explode(' ', $string);
for($ii = 0,$j=0; $ii< 5 && $j < sizeof($words) ;$j++){
    $ii += strlen($words[$j]);
    $intro= $words[$j]."";    
}
$intro.="...";

我知道已经很晚了,但是如果有人回到这一页,这就可以了,


我同意帕斯卡·马丁的回答,并做了一些额外的改进。因为;

1-"php wordwarp",自动尊重单词边界

2-如果字符串包含超过25个字符的单词(aagh,因此没有任何操作),则可以强制"php wordwarp"剪切单词。(改进)

3-如果你的字符串少于25个字符,那么"…"在一个完整的句子后会显得很难看。(改进)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$str ="This string might be longer than 25 chars, or might not!";
// we are forcing to cut long words...
$wrapped = wordwrap($str, 25,"
"
, 1);
var_dump($wrapped);

$lines = explode("
"
, $wrapped);
var_dump($lines);

// if our $str is shorter than 25, there will be no $lines[1]
(array_key_exists('1', $lines)) ? $suffix = '...' : $suffix = '';
$new_str = $lines[0] . $suffix;
var_dump($new_str);

您正在寻找SUBSTR方法。

1
$s = substr($input, 0, 25);

这会让你得到第一个字符串的夹头,然后你可以附加任何你想要的到结尾。


SUBSTR函数是适合您的函数


1
 echo substr($str,0,25)."...";

会的,但如果你处理的是文字,你可能会想切断文字边界,这样你就不会有部分文字这样做:快速BL…

所以要做到这一点(我头脑中的粗暴):

1
2
3
4
5
6
7
8
$words = split("", strlen($str));

for($i = 0,$j=0; $i< 25 && $j < sizeof($words) ;$j++)
{
    $i += strlen($words[$j]);
    echo $words[$j]."";    
}
echo"...";

1
<?php echo substr('12345678901234567890abcdefg', 0, 20) . '...' ?>

http://fr.php.net/manual/en/function.substr.php