如何使用特殊字符截断 HTML



我知道有多种方法可以将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... 时,它显示得完全一样。

编辑:

(作为答案发布)

我认为通过将第一行代码更改为:

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

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

使用自动换行 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

我试过

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/的解决方案(链接在缩短文本推文状,无需在内部剪切链接)工作得很好 - 处理 html标签、保留整个单词(或不保留)和 html实体。 现在只是:

function truncateIfNecessary($string, $length) {
    if(strlen($string) > $length) {
        return truncateHtml($string, $length, "...", true, true);
    } else {
        return strip_tags($string);
    }
}
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;
}

相关内容

  • 没有找到相关文章

最新更新