简体   繁体   English

如何使用PHP删除JS注释?

[英]How to remove JS comments using PHP?

How to remove JS comments using PHP? 如何使用PHP删除JS注释? This question is updated: Nov. 4 2013 and answered by: Alexander Yancharuk But there is a problem right now. 这个问题已更新:2013年11月4日回答:Alexander Yancharuk但是现在有一个问题。 A new code: id = id.replace(/\\//g,''); 一个新代码: id = id.replace(/\\//g,'');

This is my example: 这是我的例子:

<?php
$output = "
//remove comment
this1 //remove comment
this2 /* remove comment */
this3 /* remove
comment */
this4 /* * * remove
* * * *
comment * * */
this5 http://removecomment.com
id = id.replace(/\//g,''); //do not remove the regex //
";

$output = preg_replace( "/(?:(?:\/\*(?:[^*]|(?:\*+[^*\/]))*\*+\/)|(?:(?<!\:)\/\/.*))/", "", $output ); //Yancharuk's code/regex
// "/(?<!\:)\/\/(.*)\\n/ = my oldest code

echo nl2br($output);
?>

My Problems; 我的问题;

  1. Something wrong with the this1 line; 这一行有问题;
  2. The //comments is working but I can't create a codes to remove /* comment */ or by that comment with a line break //注释正在运行,但我无法创建代码来删除/ *注释* /或带有换行符的注释

Here is the output, recent: 这是输出,最近:



this1 this1
this2 this2
this3 this3
this4 this4
this5 http://removecomment.com this5 http://removecomment.com
id = id.replace(/\\ id = id.replace(/ \\

Try this: 试试这个:

$output = "
//remove comment
this1 //remove comment
this2 /* remove comment */
this3 /* remove
comment */
this4 /* * * remove
* * * *
comment * * */
this5 http://removecomment.com
id = id.replace(/\//g,''); //do not remove the regex //
HTTP+'//www.googleadservices.com/pagead/conversion'
";

$pattern = '/(?:(?:\/\*(?:[^*]|(?:\*+[^*\/]))*\*+\/)|(?:(?<!\:|\\\|\')\/\/.*))/';
$output = preg_replace($pattern, '', $output);

echo nl2br($output);

Result on codepad.org . codepad.org上的结果。

Alexander Yancharuk solution is nearly perfect, he just forgot to ignore double quotes, making his answer break on jquery.min.js which contains the code : replace(Fb,yb[1]+"//") Alexander Yancharuk的解决方案几近完美,他只是忘了忽略双引号,让他的答案在jquery.min.js上打破,其中包含代码:replace(Fb,yb [1] +“//”)

Please find below the corrected version : 请在下面找到更正后的版本:

$output = "
//remove comment
this1 //remove comment
this2 /* remove comment */
this3 /* remove
comment */
this4 /* * * remove
* * * *
comment * * */
this5 http://removecomment.com
id = id.replace(/\//g,''); //do not remove the regex //
HTTP+'//www.googleadservices.com/pagead/conversion'
";

$pattern = '/(?:(?:\/\*(?:[^*]|(?:\*+[^*\/]))*\*+\/)|(?:(?<!\:|\\\|\'|\")\/\/.*))/';
$output = preg_replace($pattern, '', $output);

echo nl2br($output);

I used this to create a on-the-flow JS compression in PHP based on Manas Tungare example for CSS : http://manas.tungare.name/software/css-compression-in-php/ 我使用它来基于Manas Tungare的CSS示例在PHP中创建一个流动的JS压缩: http ://manas.tungare.name/software/css-compression-in-php/

<?php

/**
 * On-the-fly JS Compression by A. Heiligtag
 * Based on On-the-fly CSS Compression by  Manas Tungare.
 *
 * In order to minimize the number and size of HTTP requests for JS content,
 * this script combines multiple JS files into a single file and compresses
 * it on-the-fly.
 *
 */
$cssFiles = array(
    //<!-- Bootstrap -->
    // <!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
    "./js/jquery-1.11.3.min.js",
    // <!-- Bootstrap core JavaScript
    "./js/bootstrap.min.js",
    // <!-- IE10 viewport hack for Surface/desktop Windows 8 bug -->
    "./js/ie10-viewport-bug-workaround.js",

     // <!-- Jasny bootstrap -->
    "./js/jasny-bootstrap.min.js",

    // <!-- color picker : https://github.com/istvan-ujjmeszaros/bootstrap-colorpickersliders / http://www.virtuosoft.eu/code/bootstrap-colorpickersliders/ -->
    // <!-- ‘Polyglot’ Language Switcher 2 : http://www.ixtendo.com/polyglot-language-switcher-2/ -->
    "./js/jquery-polyglot.language.switcher.js"

);

/**
 * Ideally, you wouldn't need to change any code beyond this point.
 */
$buffer = "";
foreach ($cssFiles as $cssFile) {
  $buffer .= file_get_contents($cssFile);
}
// Remove comments
$buffer = preg_replace('/(?:(?:\/\*(?:[^*]|(?:\*+[^*\/]))*\*+\/)|(?:(?<!\:|\\\|\'|\")\/\/.*))/', '', $buffer);
// Remove space after colons
$buffer = str_replace(': ', ':', $buffer);
// Remove space before equal signs
$buffer = str_replace(' =', '=', $buffer);
// Remove space after equal signs
$buffer = str_replace('= ', '=', $buffer);
// Remove whitespace
$buffer = str_replace(array("\r\n\r\n", "\n\n", "\r\r", '\t', '  ', '    ', '    '), '', $buffer);
// Enable GZip encoding.
ob_start("ob_gzhandler");
// Enable caching
header('Cache-Control: public');
// Expire in one day
header('Expires: ' . gmdate('D, d M Y H:i:s', time() + 86400) . ' GMT');
// Set the correct MIME type, because Apache won't set it for us
header("Content-type: application/javascript");
// Write everything out
echo($buffer);
?>

To remove JavaScript comments and CDATA blocks (//<![CDATA[ , //]]>) combine alex's soluton https://stackoverflow.com/a/8283600/2910183 and Alexander's Yancharuk solution https://stackoverflow.com/a/19510664/2910183 : 要删除JavaScript注释和CDATA块(//<![CDATA[ , //]]>)结合Alex的soluton https://stackoverflow.com/a/8283600/2910183和亚历山大的Yancharuk解决方案https://stackoverflow.com/ a / 19510664/2910183

$content = preg_replace('~//<!\[CDATA\[\s*|\s*//\]\]>~', '', $content);
$content = preg_replace('/(?:(?:\/\*(?:[^*]|(?:\*+[^*\/]))*\*+\/)|(?:(?<!\:|\\\)\/\/[^"\'].*))/', '', $content);

This is my best result, following the first post and searching many sites, this function well works for javascript and css and html content in php 这是我的最好的结果,在第一篇文章和搜索许多网站后,这个功能适用于PHP中的JavaScript和CSS和HTML内容

function _compress($html){
   //remove comments
   $html = preg_replace('|(?:(?:\/\*(?:[^*]|(?:\*+[^*\/]))*\*+\/)|(?:(?<!\:)\/\/.*))|', '', $html ); //Yancharuk's code/regex

   // remove tabs, spaces, newlines, etc.
   $html = str_replace(array(PHP_EOL, "\t"), '', $html);

   //remove all spaces
   $html = preg_replace('|\s\s+|', ' ', $html);

   return $html;
}

If you want to remove comments from your client side javascript code then you doing it wrong. 如果您想从客户端javascript代码中删除评论,那么您做错了。

Just use minifier. 只需使用minifier。 On top of removing comments, it will remove meaningless whitespaces and shorten all names in script. 除了删除注释之外,它还将删除无意义的空格并缩短脚本中的所有名称。

For example github: UglifyJS 2 例如github:UglifyJS 2

Complex regexp hangs up!!! 复杂的正则表达式挂起!!! Use simple ones for work with thousands of lines 使用简单的工具可以使用数千行

$module = preg_replace('/\/\*[^\/]*\*\//', '', $module);
/*
* remove comments like this 
*/

$module = preg_replace('/\/\*\*((\r\n|\n) \*[^\n]*)+(\r\n|\n) \*\//', '', $module);
/**
 * remove comments like this other method
 */
$module = preg_replace('/\n(\s+)?\/\/[^\n]*/', '', $module);
// remove comments like this
$module = preg_replace('/ (\t| )+/', '', $module); 
//double spaces
$module = preg_replace('/([\n])+/', "$1", $module);
//double newlines

I would like to share a regex (PHP) snippet of code I wrote for myself it is also being used in the YIREO sriptmerge plugin for joomla marked as simple code.. To compress javascript code and remove all comments from it. 我想分享一个我为自己写的代码的正则表达式(PHP)代码段,它也被用在joomla的YIREO sriptmerge插件中,标记为简单代码。压缩javascript代码并从中删除所有注释。 It also works with mootools It is fast (in comparison to other PHP solutions) and does not damage the JavaScript it self and it resolves lots of comment removal issues. 它也适用于mootools它很快(与其他PHP解决方案相比)并且不会损害它自己的JavaScript并且它解决了许多注释删除问题。

If you click on the link below you find a comment removal script in regex. 

These are 112 lines off code that work together also works with mootools and Joomla and drupal and other cms websites. 这些是112行代码,可以与mootools和Joomla以及drupal和其他cms网站一起使用。 Tested it on 800.000 lines of code and comments. 测试了800.000行代码和注释。 works fine. 工作良好。 This one also selects multiple parenthetical like ( abc(/ nn /('/ xvx /'))"// testing line") and comments that are between colons and protect them. 这个也选择多个括号像(abc(/ nn /('/ xvx /'))“//测试行”)和冒号之间的注释并保护它们。 23-01-2016..! 23-01-2016 ..! This is the code with the comments in it.!!!! 这是带有注释的代码。!!!!

Click Here 点击这里

I have just for the fun of it tested this ( var regex=/(ftp|https?):\\/\\//;alert('hello,world'); ) and this /* foo(); // some comment */ 我只是为了测试它的乐趣( var regex=/(ftp|https?):\\/\\//;alert('hello,world'); )和这个/* foo(); // some comment */ /* foo(); // some comment */ and this: "Python's division: 1 // 2" and this //"you dope" example and my compression code those not damage the example above! /* foo(); // some comment */和这个: "Python's division: 1 // 2"和这个//"you dope"例子和我的压缩代码那些不会破坏上面的例子! COMMENT FROM ABOVE:( A stupid parser that uses regular expressions will treat valid JavaScript code as comments!) So Maybe you can also write none stupid parsers with regex??? 上面的评论:(使用正则表达式的愚蠢解析器会将有效的JavaScript代码视为注释!)所以也许你也可以用正则表达式编写没有愚蠢的解析器???

Please feel free to leave a comment if you find a problem with this script with valid javascript sentences. 如果您发现此脚本存在问题且有效的javascript语句,请随时发表评论。 And any kind of comments tags combined (or not combined) that it does not solve correctly.. 任何类型的评论标签组合(或不组合),它没有正确解决..

Updated needs no more testing 800.000 lines work fine now.! 更新的需求不再需要测试800.000线现在工作正常。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM