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

csga3l58  于 2023-01-22  发布在  PHP
关注(0)|答案(4)|浏览(115)

我正在构建一个PHP脚本来缩小CSS/Javascript,这(显然)涉及到从文件中删除注解。有什么想法吗?(最好是,我需要删除/**///注解)

gfttwv5a

gfttwv5a1#

JS中删除注解的模式

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

CSS中删除注解的模式

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

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

我希望上面能帮助到一些人。
参考:http://castlesblog.com/2010/august/14/php-javascript-css-minification

lymgl2op

lymgl2op2#

这个轮子已经被发明出来了--https://github.com/mrclay/minify

oipij1gg

oipij1gg3#

请注意-以下方法并非适用于所有可能的情况。在生产中使用之前进行测试

没有preg模式,没有任何类似的东西,这可以很容易地用PHP内置的TOKENIZER来完成。(PHP、JS和CSS也是如此)在源文件中表示注解的方式相同,PHP的本机内置token_get_all()函数(不带TOKEN_PARSE标志)可能会造成不良后果,即使输入字符串不是格式良好的PHP代码,这正是一个人可能需要的。它所要求的只是字符串开头的<?php,然后奇迹就发生了。:)

<?php 
function no_comments (string $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, '', $tokens);
}

其用法大致如下:

echo no_comments ($myCSSorJsStringWithComments);
uwopmtnx

uwopmtnx4#

看一看minify,一个“基于正则表达式的大量空格、不必要的注解和标记的删除”。

相关问题