当前位置: 首页 > 面试题库 >

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

张高义
2023-03-14
问题内容

从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上出现的问题。


问题答案:

我会使用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;


 类似资料:
  • 问题内容: 我的网站最近遭到了一个无辜的代码的攻击: 那里没有SQL调用,因此我不担心SQL注入。但是,显然,SQL并不是唯一的注入方式。 该网站提供了解释以及避免代码注入的一些示例:http : //www.theserverpages.com/articles/webmasters/php/security/Code_Injection_Vulnerabilities_Explained.ht

  • 问题内容: 我刚刚在此处阅读了一个新问题,询问的标题与我的基本相同。那让我开始思考-并在网络上搜索(当然,大多数点击都指向SO;)。所以我认为 - 应该有一个简单的正则表达式,能够从任何代码中删除C样式的注释。 是的,关于SO的这个问题/陈述有答案,但是我发现的答案都是不完整和/或过于复杂。 因此,我开始进行实验,并提出了一个可以在 我 能想象的所有类型的代码上运行的代码: 第一种选择检查 双斜杠

  • 问题内容: 在Python中,至少有两种方法可以使用键从字典中删除项目。 两种方法都会从字典中删除项目。 我想知道这些方法之间有什么区别,以及在哪种情况下应该使用其中一种。 问题答案: 如果要 捕获已删除的项目 ,请使用,例如。 使用,如果你想 从字典中删除项目 。 如果要删除,则在密钥不在词典中时禁止显示错误:

  • 有没有办法从一个巨大的xml文件中删除注释( 两者,根元素前的注释 和内的注释 最好的解决方案是使用xPath。我试过了 它适用于DOM,但不适用于vtd xml 这是我选择评论的代码 但此处的屏幕上打印的是nothing。 有没有办法用vtd xml做到这一点? 谢谢你的帮助。

  • 我们正在使用一个包含用JAXB注释的bean的库。我们使用这些类的方式并不依赖于JAXB。换句话说,我们不需要JAXB,也不依赖于注释。 然而,由于注释的存在,它们最终会被处理注释的其他类引用。这要求我在应用程序中绑定JAXB,这是不允许的,因为JAXB在

  • 问题内容: 问题 在处理产品和订单的Web应用程序中,我想维护前雇员(用户)与其处理的订单之间的信息和关系。我想维护过时产品与包括这些产品的订单之间的信息和关系。 但是我希望员工能够整理管理界面,例如删除前员工,过时的产品,过时的产品组等。 我正在考虑实施软删除。那么,通常如何做到这一点? 我的即时想法 我的第一个想法是在应该可以软删除的每个对象表中粘贴“ TINYINT NOT NULL DEF