Без шаблонов preg, без чего-либо подобного, это легко сделать с помощью встроенного в 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);