我知道将HTML字符串截断到一定长度的各种方法,包括/不包括HTML标记作为结果的一部分和/或截断,同时保留整个单词和诸如此类的东西。不过,我的问题是字符串是否包含–
或&
我需要将一个字符串截断为100个字符(如果在特殊字符的中间截断,则需要少一些字符)。现在我有一个功能:
$result= truncateIfNecessary(strip_tags($fullText), 100); //ignore HTML tags
function truncateIfNecessary($string, $length) {
if(strlen($string) > $length) {
return substr($string, 0, $length).'...';
} else {
return $string;
}
}
但是,如果字符串类似text text – text
(在页面上显示为:text text - text
而$length
属于–
,则会返回显示的text text &nda...
就像那样,当我需要它返回text text...
时。
编辑:
(张贴为答案)
答案 0 :(得分:0)
我认为您的问题可以通过将第一行代码更改为:
来解决$result = strip_tags(truncateIfNecessary($fullText, 100));
这样你首先调整长度,然后处理HTML字符。
答案 1 :(得分:0)
使用wordwrap php函数。
类似的东西:
$result = wordwrap(strip_tags($fullText), 100, "...\n"); // Remove HTML and split
$result = explode("\n", $result);
$result = $result[0]; // Select the first group of 100 characters
答案 2 :(得分:0)
我试过
function truncateIfNecessary($string, $length) {
if(strlen($string) > $length) {
$string = html_entity_decode(strip_tags($string));
$string = substr($string, 0, $length).'...';
$string = htmlentities($string);
return $string;
} else {
return strip_tags($string);
}
}
但由于某种原因,它错过了一些–
和•
。现在,我发现http://alanwhipple.com/2011/05/25/php-truncate-string-preserving-html-tags-words/处的解决方案(在Shortening text tweet-like without cutting links inside处链接)完美地工作 - 处理htmltags,保留整个单词(或不保留)和htmlentities。现在只是:
function truncateIfNecessary($string, $length) {
if(strlen($string) > $length) {
return truncateHtml($string, $length, "...", true, true);
} else {
return strip_tags($string);
}
}
答案 3 :(得分:0)
function _truncate($string,$lenMax = 100) {
$len = strlen($string);
if ($len > $lenMax - 1) {
$string = substr(strip_tags($string),0,$lenMax);
$string = substr($string,0,strrpos($string," ")).'...';
}
return $string;
}