<?php
$input = nl2br($_POST['input']);
$newStr = '';
$commentTokens = array(T_COMMENT);
if (defined('T_DOC_COMMENT'))
$commentTokens[] = T_DOC_COMMENT; // PHP 5
if (defined('T_ML_COMMENT'))
$commentTokens[] = T_ML_COMMENT; // PHP 4
$tokens = token_get_all($input);
foreach ($tokens as $token) {
if (is_array($token)) {
if (in_array($token[0], $commentTokens))
continue;
$token = $token[1];
}
/*test*/
$newStr .= $token;
}
echo $newStr;
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
<textarea name="input" id="" cols="50" rows="30"></textarea>
<input type="submit">
</form>
出于某种原因,它不会删除注释,只会删除开头的第一行并按原样打印代码。
我做错了吗?
答案 0 :(得分:0)
如果您不添加PHP打开/关闭标记,则评论将为T_INLINE_HTML
令牌。
查看token_get_all处的示例。
更新:
如果你发布PHP代码nl2br
没有意义,因为它会在代码中添加<br>
标记。
请尝试以下方法:
$input = '<?php '.$_POST['input'].' ?>';
UPDATE2:
如果源只是HTML,则使用DOM解析器。请参阅此处的示例:remove comments from html source code
如果源是PHP和HTML的混合,您还需要混合使用tokenizer和DOM解析器。因此,您将使用您拥有的代码以及您使用DOM解析器解析的令牌T_INLINE_HTML
所获得的内容。