检查字符串中的html语法

时间:2015-05-20 09:06:02

标签: php html

我找不到解决方案。

如何使用html代码检查字符串。

例如

<p><o:p></o:p></p> 
<p> <br /> </p> 
<p><b style=\"font-weight: bold;\"><b>Desc: </b>AnyText.</p> 
 <br /> </p> 
<p><b>Color:</b> green<
<p> <b>Param 2: AU55688</p> 
<p><b>Param 3: </b>420 x 562</p> 
<p><b>Height: </b>1425</p>

如果有未封闭的标签或未被发现,则返回字符串(如果一切正常),然后跳过。

我发现并修改了功能。但它无法正常工作

function closetag($html)
{
    $ignore_tags = array('img', 'br', 'hr');

    preg_match_all ( "#<([a-z]+)( .*)?(?!/)>#iU", mb_strtolower($html), $result1);
    preg_match_all ( "#</([a-z]+)>#iU", mb_strtolower($html), $result2);
    $results_start = $result1[1];
    $results_end = $result2[1];

    $result = array();
    foreach($results_start AS $startag)
    {
        if (!in_array($startag, $results_end) && !in_array($startag, $ignore_tags))
        {
            $result['start_tags'][] = $startag;
        }
    }
    foreach($results_end AS $endtag)
    {
        if (!in_array($endtag, $results_start) && !in_array($endtag, $ignore_tags))
        {
            $result['end_tags'][] = $endtag;
        }
    }

    return ($result) ? $result : false;
}

我不需要更正代码,我只需要确定语法不正确。

我想要获得结果的一个例子

$getTexts = $this->getTexts();

$no_valid = array();
foreach($getTexts AS $text)
{
    $_valid = check_html_systax_function($text);
    if (!$_valid)
    {
        $no_valid[] = $text;
    }
}

check_html_systax_function 检查文本是否有正确的html语法

$ no_valid html语法错误的文本数组

P.S。抱歉我的英文!

3 个答案:

答案 0 :(得分:0)

请勿使用Regex解析或验证HTML。

对于PHP,有一个类DOMDocument。您可以按如下方式使用它:

$dom = new DOMDocument;
$dom->loadHTML($html);
if ($dom->validate()) {
    //valid HTML code
}

如果您正在寻找能够提供更多可配置性和详细错误报告的库,请查看HTMLpurifier

答案 1 :(得分:0)

您可以查看PHP HTML DOM解析器的以下链接:

答案 2 :(得分:0)

您可以通过以下代码检查html是否有效:

function closetags($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) {
        echo 'valid html'; 
    } else {
        echo 'invalid html';
    }
} 

$html = '<p>This is some text and here is a <strong>bold text then the post stop here....</p>';
closetags($html);