如何截断带有特殊字符的HTML?

时间:2013-09-16 17:55:59

标签: php html truncate

我知道将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 个答案:

答案 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;
}