0

私の Web サイトには、php の「substr」メソッドを使用して長いテキスト文字列を切り取るコードがあります。しかし、文字列に画像のコードがある場合、画像のコードの途中で切れてしまい、画像が正しく表示されないことがありますか?

どうすればこれを修正できますか?

4

2 に答える 2

3

を使用する前に、テキストでstrip_tagsを呼び出すのはどうsubstrですか? エンティティも削除する必要がある場合は、単純な正規表現を使用してエンティティを削除するか、html_entity_decodeをミックスに追加することもできます。

例:

substr(strip_tags($text), 0, 10);
于 2012-06-18T20:43:36.797 に答える
-2

これは私が以前に使用した機能です:

function trimHTML($text, $max_length) {
    $tags = array();
    $result = "";

    $is_open = false;
    $grab_open = false;
    $is_close = false;
    $in_double_quotes = false;
    $in_single_quotes = false;
    $tag = "";

    $i = 0;
    $stripped = 0;

    $stripped_text = strip_tags($text);

    while ($i < strlen($text) && $stripped < strlen($stripped_text) && $stripped < $max_length) {
        $symbol = $text{$i};
        $result .= $symbol;

        switch ($symbol) {
            case '<':
                $is_open = true;
                $grab_open = true;
                break;

            case '"':
                if ($in_double_quotes)
                    $in_double_quotes = false;
                else
                    $in_double_quotes = true;

                break;

            case "'":
                if ($in_single_quotes)
                    $in_single_quotes = false;
                else
                    $in_single_quotes = true;

                break;

            case '/':
                if ($is_open && !$in_double_quotes && !$in_single_quotes) {
                    $is_close = true;
                    $is_open = false;
                    $grab_open = false;
                }

                break;

            case ' ':
                if ($is_open)
                    $grab_open = false;
                else
                    $stripped++;

                break;

            case '>':
                if ($is_open) {
                    $is_open = false;
                    $grab_open = false;
                    array_push($tags, $tag);
                    $tag = "";
                } else if ($is_close) {
                    $is_close = false;
                    array_pop($tags);
                    $tag = "";
                }

                break;

            default:
                if ($grab_open || $is_close)
                    $tag .= $symbol;

                if (!$is_open && !$is_close)
                    $stripped++;
        }

        $i++;
    }

    while ($tags) {
        $result .= "</" . array_pop($tags) . ">";
    }

    return $result;
};
于 2012-06-18T20:39:46.193 に答える