+ -
当前位置:首页 → 问答吧 → 检测HTML格式的函数

检测HTML格式的函数

时间:2008-08-18

来源:互联网

你是否用过fck和eWebEditor等html在线编辑器?是否遇到标签没有闭合的情况啊?本函数可以检测HTML文档的格式是否正确;
复制PHP内容到剪贴板
PHP代码:

<?php
function checkHTML($code) {
    $code_len = strlen($code);
    $counter = 0;
    $elements = array();
    
    while (true) {
        if ($code{$counter} == '<' && $code{$counter}.$code{$counter + 1} != '</') {
            $counter++;
            $element = '';
            while (true) {
                if ($code{$counter} == '>') {
                    $elements[] = trim($element);
                    unset($element);
                    break;
                } else if ($code{$counter} == ' ') {
                    $elements[] = trim($element);
                    unset($element);
                    break;
                }
                $element .= $code{$counter};
                $counter++;
            }
        } else if ($code{$counter}.$code{$counter + 1} == '</') {
            $counter = $counter + 2;
            $element = '';
            while (true) {
                if ($code{$counter} == '>') {
                    if ($elements[sizeof($elements) - 1] != $element) {
                        return false;
                    } else {
                        array_pop($elements);
                    }
                    unset($element);
                    break;
                }
                $element .= $code{$counter};
                $counter++;
            }
        }
        $counter++;
        if($counter >= $code_len) break;
    }
    if (sizeof($elements) == 0) {
        return true;
    } else {
        return false;
    }
}

//正确的格式
$html1 = <<<HTML
<html>
<head></head>
<body>
    <div>hello world</div>
</body>
</html>
HTML;

//错误的格式
$html2 = <<<HTML
<html>
<head></head>
<body>
    <div>hello world
</body>
</html>
HTML;

if(checkHTML($html1))echo "格式1正确\n";
else echo "格式1错误\n";
if(checkHTML($html2))echo "格式2正确\n";
else echo "格式2错误\n";
?>

结果输出:格式1正确        格式2错误

作者: liexusong   发布时间: 2008-08-17

不错,不知该用在什么地方

作者: ttapeng   发布时间: 2008-08-17