0

我知道将 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...

编辑:

(作为答案发布)

4

4 回答 4

0

我认为您的问题可以通过将第一行代码更改为:

$result = strip_tags(truncateIfNecessary($fullText, 100));

这样,您首先调整长度,然后处理 HTML 字符。

于 2013-09-16T18:08:49.063 回答
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
于 2013-09-16T18:47:41.093 回答
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);
    }
}
于 2013-09-16T18:47:59.430 回答
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;
}
于 2016-01-08T16:02:45.943 回答