我找不到解决方案。
如何使用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。抱歉我的英文!
答案 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);