0

私のアプリケーションでは、人々がコメントを投稿していて、ユーザーがタグを閉じないために、すべてのレイアウトが破壊されることがあります。

ユーザーがhtmlコメントを投稿できるようにします。

たとえば、彼らはこのように投稿します:

<center><b>Hello

だから私が欲しいのは、その上のタグを閉じて、このようにすることです:

<center><b>Hello</b></center>

私はグーグルで検索しましたが、良い解決策が見つからなかったので、私はここにいます。

この方法を試しましたが、機能しません。

$yourText = $row['content'];

$doc = new DOMDocument();
$doc->loadHTML("$yourText");
$yourText = $doc->saveHTML();

ありがとう。

4

5 に答える 5

1

あなたはおそらくHTMLTidyを探しています。

<?php
ob_start();
?>
<html>a html document</html>
<?php
$html = ob_get_clean();

// Specify configuration
$config = array(
           'indent'         => true,
           'output-xhtml'   => true,
           'wrap'           => 200);

// Tidy
$tidy = new tidy;
$tidy->parseString($html, $config, 'utf8');
$tidy->cleanRepair();

// Output
echo $tidy;
?>
于 2013-03-20T17:26:16.680 に答える
1

この関数を使用して、コンテンツで開いているすべてのHTMLタグを閉じることができます。

function closeHtmlTags($html) {

    preg_match_all('#<(?!meta|img|br|hr|input\b)\b([a-z]+)(?: .*)?(?<![/|/ ])>#iU', $html, $result);
    $openedtags = $result[1];
    preg_match_all('#</([a-z]+)>#iU', $html, $result);
    $closedtags = $result[1];
    $len_opened = count($openedtags);

    if (count($closedtags) == $len_opened) {
        return $html;
    }
    $openedtags = array_reverse($openedtags);

    for ($i=0; $i < $len_opened; $i++) {
        if (!in_array($openedtags[$i], $closedtags)) {
            $html .= '</'.$openedtags[$i].'>';
        } else {
            unset($closedtags[array_search($openedtags[$i], $closedtags)]);
        }
    }

    return $html;
}

ただ電話してください:

$content = closeHtmlTags($content);

これにより、すべてのHTMLタグが閉じるコンテンツが返されます。

また、PHP拡張機能を使用できますphp_tidy

$tidy = new Tidy();
$content = $tidy->repairString($str, array(
    'output-xml' => true,
    'input-xml' => true
));

お役に立てれば

于 2013-03-20T17:31:58.997 に答える
0

ユーザーにHTMLの投稿を許可しないでください。彼らはあなたのサイトを変更したり、Javascriptを追加したり、好きなことをしたりすることができます。

必ずHTMLフォーマットを削除してくださいstrip_tags()

于 2013-03-20T17:26:07.637 に答える
0

開いているタグの数を検索してから、閉じているタグの数を検索し、その数が一致することを確認できます。送信されない場合は、ユーザーに通知してください。

于 2013-03-20T17:28:38.217 に答える
0

最も簡単で最も厄介な方法は次のとおりです。

$yourText = $row['content'];

$doc = new DOMDocument();
$doc->loadHTML("$yourText");
$otherText = $doc->saveHTML();

if(!empty($otherText)){
    //the usertext was good html
}else{
    $yourText = strip_tags($yourText);
}

しかし、あなたはいくつかの深刻なXXS注射で終わるかもしれません!!!

于 2013-03-20T17:29:41.787 に答える