使用[PHP]从JS / CSS文件中删除注释

时间:2010-12-22 15:08:33

标签: php css minify

我正在构建一个PHP脚本来缩小 CSS / Javascript ,这显然涉及从文件中删除注释。任何想法如何做到这一点? (最好,我需要摆脱/**///评论)

4 个答案:

答案 0 :(得分:5)

用于删除JS中的注释的模式

$pattern = '/((?:\/\*(?:[^*]|(?:\*+[^*\/]))*\*+\/)|(?:\/\/.*))/';

用于删除CSS中的注释的模式

$pattern = '!/\*[^*]*\*+([^/][^*]*\*+)*/!'; 

$str = preg_replace($pattern, '', $str);

我希望以上可以帮助别人..

REFF:http://castlesblog.com/2010/august/14/php-javascript-css-minification

答案 1 :(得分:4)

这个轮子已被发明 - http://code.google.com/p/minify/

答案 2 :(得分:1)

看看minify,“基于正则表达式的重复删除空格,不必要的注释和标记。”

答案 3 :(得分:0)

没有预浸模式,没有任何类似之处,可以使用PHP内置的TOKENIZER轻松完成。所有这三个(以及PHP,JS和CSS)都以相同的方式在源文件中表示注释,并且PHP的本机内置token_get_all()函数(不带有TOKEN_PARSE标志)甚至可以起到肮脏的作用。如果输入的字符串格式不正确的PHP代码,则在这种情况下可能正是需要的。它要求的只是在字符串的开头<?php,然后发生魔术。 :)

function no_comments ($tokens)
{   // Remove all block and line comments in css/js files with PHP tokenizer.
    $remove = [];
    $suspects = ['T_COMMENT', 'T_DOC_COMMENT'];
    $iterate = token_get_all ('<?php '. PHP_EOL . $tokens);

    foreach ($iterate as $token) 
    {
        if (is_array ($token)) 
        {
            $name = token_name ($token[0]); 
            $chr = substr($token[1],0,1);

            if (in_array ($name, $suspects) 
            && $chr !== '#') $remove[] = $token[1];
        }
    }

    return str_replace ($remove, null, $tokens);
}

用法如下:

echo no_comments ($myCSSorJsStringWithComments);