[ticket/9646] Honor CSS comments in @import statements

Add a basic CSS comment parser that allows comments to prevent loading an
@import statement. For simplicity, only whitespace is allowed between /* and
the @import. Also adjust regex to not parse improper quotation marks.

PHPBB3-9646
PHPBB3-8169
This commit is contained in:
Josh Woody 2010-08-20 15:37:48 -05:00
parent 64e6faa877
commit c3a5fd30ee

View file

@ -2531,13 +2531,21 @@ parse_css_file = {PARSE_CSS_FILE}
// Match CSS imports // Match CSS imports
$matches = array(); $matches = array();
preg_match_all('/@import url\(["\'](.*)["\']\);/i', $stylesheet, $matches); preg_match_all('/@import url\((["\'])(.*)\1\);/i', $stylesheet, $matches);
// remove commented stylesheets (very simple parser, allows only whitespace
// around an @import statement)
preg_match_all('#/\*\s*@import url\((["\'])(.*)\1\);\s\*/#i', $stylesheet, $commented);
$matches[2] = array_diff($matches[2], $commented[2]);
if (sizeof($matches)) if (sizeof($matches))
{ {
foreach ($matches[0] as $idx => $match) foreach ($matches[0] as $idx => $match)
{ {
$stylesheet = str_replace($match, acp_styles::load_css_file($theme_row['theme_path'], $matches[1][$idx]), $stylesheet); if (isset($matches[2][$idx]))
{
$stylesheet = str_replace($match, acp_styles::load_css_file($theme_row['theme_path'], $matches[2][$idx]), $stylesheet);
}
} }
} }