0

テキストを切り捨てる次の関数があります。

 /**
     * Removes HTML tags, crops to 255 symbols
     *
     * @param string $unformatted
     */
    public function formatShortDescr($unformatted) {
        if(strlen($unformatted)<1) return;

        $long_text = strip_tags(trim($unformatted));
        $max_length = 255;

        if(strlen($long_text) > $max_length){
            $short_text = (substr($long_text,0,$max_length));
        } else {
            $short_text = $long_text;
        }
        return $short_text;
    }

例:次 <p>Victory har utvecklats f&ouml;r att passa den &auml;gare som beh&ouml;ver en kompakt, ........のように変換されます:Victory har utvecklats f&ouml;r att passa den &a

HTMLエンティティを中断する途中で文字列を切断しないように設定するにはどうすればよいですか?

4

2 に答える 2

1

最初にエンティティを通常の文字に変換し、次にmb_strlen(2バイト文字のためUTF8)を使用して長さを確認し、mb_substringを使用して切り捨ててから、エンティティを元に戻すのは簡単です...

    $long_text = strip_tags(trim($unformatted));
    $long_text = html_entity_decode($long_text);

    $long_text = mb_strlen($long_text) > $max_length ? mb_substr($long_text, 0, $max_length) : $long_text;

    return htmlentities($long_text);
于 2012-08-13T23:27:15.043 に答える
1

場合によっては適切な代替アプローチは、代わりに最後のスペースで切り捨てることです。正確に255文字が必要かどうか、または読みやすいものが必要かどうかによって異なりますが、便利な副作用として、HTMLエンティティについて心配する必要はありません。

例えば:

$string = "this is the long test string to test with";
$limit = 20;

$result = substr($string, 0, strrpos($string, " ", -$limit)-1);
echo $result; // "this is the long"
于 2012-08-13T23:31:18.963 に答える