一尘不染

自动从PHP代码中删除注释的最佳方法

php

从PHP文件中删除注释的最佳方法是什么?

我想做一些与strip-whitespace()类似的事情-但它也不应该删除换行符。

例如:

我要这个:

<?PHP
// something
if ($whatsit) {
    do_something(); # we do something here
    echo '<html>Some embedded HTML</html>';
}
/* another long 
comment
*/
some_more_code();
?>

成为:

<?PHP
if ($whatsit) {
    do_something();
    echo '<html>Some embedded HTML</html>';
}
some_more_code();
?>

(尽管如果在删除注释的地方仍然留有空行,那是不可能的)。

由于可能需要保留嵌入式html,因此这可能是不可能的-那是什么导致了google上出现的问题。


阅读 411

收藏
2020-05-26

共1个答案

一尘不染

我会使用tokenizer。这是我的解决方案。它应该在PHP
4和5上都可以使用:

$fileStr = file_get_contents('path/to/file');
$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($fileStr);

foreach ($tokens as $token) {    
    if (is_array($token)) {
        if (in_array($token[0], $commentTokens))
            continue;

        $token = $token[1];
    }

    $newStr .= $token;
}

echo $newStr;
2020-05-26