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

您可能正在寻找HTML Tidy

<?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

您可以搜索打开标签的数量,然后搜索结束标签的数量并确保该数字匹配 - 如果它不提交并让用户知道。

于 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 回答
0

不允许用户发布 HTML!他们可以修改您的网站,添加 Javascript,做任何他们想做的事情。

确保删除 HTML 格式strip_tags()

于 2013-03-20T17:26:07.637 回答