Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/237.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用[PHP]从JS/CSS文件中删除注释_Php_Css_Minify - Fatal编程技术网

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

使用[PHP]从JS/CSS文件中删除注释,php,css,minify,Php,Css,Minify,我正在构建一个PHP脚本来缩小CSS/Javascript,这(显然)需要从文件中删除注释。有什么办法吗?(最好,我需要去掉/***/和/注释)轮子已经发明了--看看,一种“基于正则表达式的大量删除空白、不必要的注释和标记的模式。”用于删除JS中的注释 $pattern = '/((?:\/\*(?:[^*]|(?:\*+[^*\/]))*\*+\/)|(?:\/\/.*))/'; CSS中删除注释的模式 $pattern = '!/\*[^*]*\*+([^/][^*]*\*+)*/!';

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

轮子已经发明了--

看看,一种“基于正则表达式的大量删除空白、不必要的注释和标记的模式。”

用于删除JS中的注释

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

CSS中删除注释的模式

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

$str = preg_replace($pattern, '', $str);
我希望上面能帮助到某人


REFF:

没有preg模式,没有任何相似的模式,这可以通过PHP内置的标记器轻松完成。这三个函数(PHP、JS和CSS)在源文件中都使用相同的表示注释的方式,PHP的本机内置
token\u get\u All()
函数(不带
token\u PARSE
标志)可以使用肮脏的技巧,即使输入字符串不是格式良好的PHP代码,这正是本场景中可能需要的。它所要求的是
Ehm。。。解析CSS和JS?如果你不能做到这一点,请使用现有的迷你程序,例如google closure compiler for JS。不是答案,而是。。。值得注意的是,缩小CSS和JavaScript并不是一件小事。即使您对删除注释和空白所提供的最小大小缩减感到满意,您编写的任何解析器都可能因边缘情况而失败。说真的,使用第三方工具的建议相当不错。这是对这个问题的回答。他试图解决的问题已经解决了。如果他不想使用这个解决方案,他至少可以从中获得灵感。特别是Minify_CSS_Compressor和JSMin类。2.1.4分支有最新版本。这种从css中删除注释的模式是唯一对我有效(完全有效)的模式。谢谢
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);