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 タグを記憶している文字を確認する必要があります (= レクサーとも呼ばれます)。次に、文字数制限に達した場合は、スタックに保存したすべての終了 bbcode タグを追加する必要があります。

また、切り捨て関数には、テキストの長さの一部として bbcode タグ自体をカウントするという大きな欠点があります。ユーザーが [url=http://very long link]picture[/url] を介して 250 文字の長いリンクを投稿するとします。たとえば、Google Images はこのような長いリンクを作成します。

これらのケースの bbcode を完全に削除するのが最善の策です。ただし、その機能がソリューションのために 5 ~ 20 時間のプログラミングを正当化する場合を除きます。

于 2012-12-19T00:20:46.940 に答える