我想要限制两个字符串,例如前25个字符。有没有办法在第25个字符后切断文本并在字符串末尾添加...?
所以'12345678901234567890abcdefg' 将转变为'12345678901234567890abcde ...',其中'fg'被切断。
答案 0 :(得分:44)
我可以修改pallan的代码吗?
$truncated = (strlen($string) > 20) ? substr($string, 0, 20) . '...' : $string;
如果它更短,则不会添加'...'。
答案 1 :(得分:10)
为避免在单词中间切换,您可能需要尝试wordwrap
功能;我认为,这样的事情可以做到:
$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("\n", $wrapped);
var_dump($lines);
$new_str = $lines[0] . '...';
var_dump($new_str);
$wrapped
将包含:
string 'this is a long string
that should be cut in the
middle of the first
'that'' (length=74)
$lines
数组将如下:
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
:
string 'this is a long string' (length=21)
使用substr,如下所示:
var_dump(substr($str, 0, 25) . '...');
你已经得到了:
string 'this is a long string tha...' (length=28)
看起来不太好看: - (
还是,玩得开心!
答案 2 :(得分:8)
真的很快,
$truncated = substr('12345678901234567890abcdefg', 0, 20) . '...'
答案 3 :(得分:6)
这个很短并且考虑了单词边界,它没有使用循环,这使得它非常有效
function truncate($str, $chars, $end = '...') {
if (strlen($str) <= $chars) return $str;
$new = substr($str, 0, $chars + 1);
return substr($new, 0, strrpos($new, ' ')) . $end;
}
用法:
truncate('My string', 5); //returns: My...
答案 4 :(得分:4)
http://php.net/manual/en/function.mb-strimwidth.php (PHP 4&gt; = 4.0.6,PHP 5,PHP 7)
<?php
echo mb_strimwidth("Hello World", 0, 10, "...");
echo "<br />";
echo mb_strimwidth("Hello", 0, 10, "...");
?>
输出:
Hello W...
Hello
答案 5 :(得分:2)
$words=explode(' ', $string);
for($ii = 0,$j=0; $ii< 5 && $j < sizeof($words) ;$j++){
$ii += strlen($words[$j]);
$intro= $words[$j]. " ";
}
$intro.= "...";
我知道它已经很晚了,但是如果有其他人回到这个页面,那就行了,
答案 6 :(得分:1)
substr功能是适合您的
答案 7 :(得分:1)
答案 8 :(得分:1)
我会选择Pascal MARTIN的答案,并进行一些额外的改进。因为;
1 - “PHP wordwrap”,自动尊重字边界
2 - 如果你的字符串中包含超过25个字符的单词(aagh,那么无所事事)你可以强制“PHP wordwrap”来剪切单词。(改进)
3 - 如果你的字符串短于25个字符,那么在完整的句子之后“......”会显得很难看。(改进)
$str = "This string might be longer than 25 chars, or might not!";
// we are forcing to cut long words...
$wrapped = wordwrap($str, 25, "\n", 1);
var_dump($wrapped);
$lines = explode("\n", $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);
答案 9 :(得分:0)
<?php echo substr('12345678901234567890abcdefg', 0, 20) . '...' ?>
答案 10 :(得分:0)
echo substr($str,0,25)."...";
可以做到这一点,但是如果你正在处理单词,你可能想要切断单词边界,这样你就没有部分单词doig:快速bl ...
所以要做到这一点(我的头脑粗糙):
$words = split(" ", strlen($str));
for($i = 0,$j=0; $i< 25 && $j < sizeof($words) ;$j++)
{
$i += strlen($words[$j]);
echo $words[$j]. " ";
}
echo "...";