Как удалить комментарии JS с помощью PHP?

Как удалить комментарии JS с помощью PHP? Этот вопрос обновлен: 4 ноября 2013 года и ответил: Александр Янчарук. Но есть проблема прямо сейчас. Новый код: id = id.replace(/\//g,'');

Это мой пример:

 <?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); ?> 

Мои проблемы;

  1. Что-то не так с этой линией;
  2. // комментарии работают, но я не могу создать коды для удаления / * comment * / или этим комментарием с разрывом строки

Вот результат:

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

Попробуй это:

 $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); 

Результат на codepad.org .

Решение Александра Янчарука почти идеально, он просто забыл игнорировать двойные кавычки, делая свой ответ разбитым на jquery.min.js, который содержит код: replace (Fb, yb [1] + "//")

Ниже приведена исправленная версия:

 $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); 

Я использовал это, чтобы создать сжатие JS на потоке в PHP на основе примера Manas Tungare для CSS: 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 MYH: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); ?> 

Чтобы удалить комментарии JavaScript и блоки CDATA (//<![CDATA[ , //]]>) объедините soluton alex https://stackoverflow.com/a/8283600/2910183 и решение Александра Янчарука https://stackoverflow.com/ a / 19510664/2910183 :

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

Если вы хотите удалить комментарии со своего javascript-кода на стороне клиента, вы делаете это неправильно.

Просто используйте minifier. Помимо удаления комментариев, он удалит бессмысленные пробелы и сократит все имена в скрипте.

Например, github: UglifyJS 2

Это мой лучший результат, после первого сообщения и поиска по многим сайтам, эта функция хорошо работает для javascript и css и html-содержимого в php

 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; } 

Я хотел бы поделиться фрагментом кода regex (PHP), который я написал для себя, он также используется в плагине YIREO sriptmerge для joomla, помеченного как простой код. Чтобы сжать код javascript и удалить из него все комментарии. Он также работает с mootools. Он работает быстро (по сравнению с другими решениями PHP) и не повреждает JavaScript сам, и он решает много проблем с удалением комментариев.

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

Это 112 строк кода, которые работают вместе, также работает с mootools и Joomla и drupal и другими сайтами cms. Протестировал его на 800 000 строк кода и комментариев. работает отлично. Это также выбирает множественные скобки (abc (/ nn / ('/ xvx /')) "// строка тестирования") и комментарии, которые находятся между двоеточиями и защищают их. 23-01-2016 ..! Это код с комментариями в нем. !!!!

Кликните сюда

Я просто для удовольствия испытал это ( var regex=/(ftp|https?):\/\//;alert('hello,world'); ) и this /* foo(); // some comment */ /* foo(); // some comment */ и это: "Python's division: 1 // 2" и это //"you dope" пример //"you dope" и мой код сжатия, которые не повреждают пример выше! КОММЕНТАРИЙ ОТ ВЫШЕ 🙁 Глупый парсер, который использует регулярные выражения, будет обрабатывать действительный код JavaScript в качестве комментариев!) Так что, возможно, вы также можете написать ни одного глупого парсера с регулярным выражением ???

Пожалуйста, не стесняйтесь оставлять комментарий, если вы обнаружите проблему с этим скриптом с действительными предложениями javascript. И любые теги комментариев комбинируются (или не комбинируются), что он не решает правильно.

Обновленные потребности больше не требуют тестирования. Теперь 800.000 строк отлично работают.!