0

目前,我正在将文本传递给此函数,以将其缩短为有 255 个字符限制的标语:

function myTruncate($string, $limit, $break=".", $pad="...") 
{ 
    // return with no change if string is shorter than $limit 
    if(strlen($string) <= $limit)
    {
        return $string; 
    }

    // is $break present between $limit and the end of the string? 
    if(false !== ($breakpoint = strpos($string, $break, $limit))) 
    { 
        if($breakpoint < strlen($string) - 1) 
        { 
            $string = substr($string, 0, $breakpoint) . $pad; 
        } 
    } 
    return $string; 
}

问题是它不断切断 bbcode,如果它在任何 bbcode 标签内,有没有办法让它完成它被切断的任何东西?

4

2 回答 2

1

不要解析你自己的 BBCode。使用BBCodePHP 自带的模块。

http://php.net/manual/en/book.bbcode.php

于 2012-12-18T21:47:48.190 回答
0

可能没有简单的解决方案。您需要检查整个输入字符串字符以查找记住内存堆栈中每个打开的 bbcode 标记的字符(= 也称为 Lexer)。然后,如果您的字符数已达到限制,您需要附加您存储在堆栈中的所有关闭 bbcode 标记。

此外,您的 truncate 函数还有一个很大的缺点,就是它将 bbcode 标签本身计为文本长度的一部分。想象一个用户通过 [url=http://very long link]picture[/url] 发布一个 250 字符长的链接。例如,Google 图片会创建如此长的链接。

您最好的选择是完全去除这些情况下的 bbcode,除非该功能证明 5-20 小时的解决方案编程是合理的。

于 2012-12-19T00:20:46.940 回答