2

现在我需要一个访问者来从 PHP 文件中提取 HTML 标记。起初,我以为我会提取 InLineHTML 类型的节点的值。像这样

if ($node instanceof Node\Stmt\InlineHTML)
        {
            self::$result[] = json_encode(utf8_encode($node->value),JSON_UNESCAPED_SLASHES);
        }

但是我发现只有 PHP 标记之外的 HTML 标记被认为是 InLineHTML 节点。像这样

<?php
   echo "aaa";
?>
<input name='test' value=''>

但后来我发现我可以使用 echo 来输出 PHP 代码中的 HTML 标签,并且它们会被视为 String_Node。

<?php
    echo "<input name='test' value='aaa'>";
/*
1: Stmt_Echo(
        exprs: array(
            0: Scalar_String(
                value: <input name='test' value='aaa'>
            )
        )
    )
*/

或者

<?php
    return '<tr class=tr1><td class=td1 width='.$l.'% align=right>';

/*
0: Stmt_Return(
                expr: Expr_BinaryOp_Concat(
                    left: Expr_BinaryOp_Concat(
                        left: Scalar_String(
                            value: <tr class=tr1><td class=td1 width=
                        )
                        right: Expr_Variable(
                            name: l
                        )
                    )
                    right: Scalar_String(
                        value: % align=right>
                    )
                )
            )
*/

这种情况下,使用判断InLineHTML进行判断是不准确的。对于String_中的完整标签,我可以使用正则表达式来匹配。但是如果标签是 Concat,比如'<input'.'>',那么这就变得困难了。

如何使用单个访客进行 HTML 标记提取

4

0 回答 0