mirror of
https://github.com/mrclay/minify.git
synced 2025-08-12 09:05:08 +02:00
Merge pull request #608 from benface/patch-1
Fix issue where minify() would corrupt some characters such as in some environments
This commit is contained in:
@@ -99,52 +99,52 @@ class Minify_HTML
|
|||||||
|
|
||||||
// replace SCRIPTs (and minify) with placeholders
|
// replace SCRIPTs (and minify) with placeholders
|
||||||
$this->_html = preg_replace_callback(
|
$this->_html = preg_replace_callback(
|
||||||
'/(\\s*)<script(\\b[^>]*?>)([\\s\\S]*?)<\\/script>(\\s*)/i'
|
'/(\\s*)<script(\\b[^>]*?>)([\\s\\S]*?)<\\/script>(\\s*)/iu'
|
||||||
,array($this, '_removeScriptCB')
|
,array($this, '_removeScriptCB')
|
||||||
,$this->_html);
|
,$this->_html);
|
||||||
|
|
||||||
// replace STYLEs (and minify) with placeholders
|
// replace STYLEs (and minify) with placeholders
|
||||||
$this->_html = preg_replace_callback(
|
$this->_html = preg_replace_callback(
|
||||||
'/\\s*<style(\\b[^>]*>)([\\s\\S]*?)<\\/style>\\s*/i'
|
'/\\s*<style(\\b[^>]*>)([\\s\\S]*?)<\\/style>\\s*/iu'
|
||||||
,array($this, '_removeStyleCB')
|
,array($this, '_removeStyleCB')
|
||||||
,$this->_html);
|
,$this->_html);
|
||||||
|
|
||||||
// remove HTML comments (not containing IE conditional comments).
|
// remove HTML comments (not containing IE conditional comments).
|
||||||
$this->_html = preg_replace_callback(
|
$this->_html = preg_replace_callback(
|
||||||
'/<!--([\\s\\S]*?)-->/'
|
'/<!--([\\s\\S]*?)-->/u'
|
||||||
,array($this, '_commentCB')
|
,array($this, '_commentCB')
|
||||||
,$this->_html);
|
,$this->_html);
|
||||||
|
|
||||||
// replace PREs with placeholders
|
// replace PREs with placeholders
|
||||||
$this->_html = preg_replace_callback('/\\s*<pre(\\b[^>]*?>[\\s\\S]*?<\\/pre>)\\s*/i'
|
$this->_html = preg_replace_callback('/\\s*<pre(\\b[^>]*?>[\\s\\S]*?<\\/pre>)\\s*/iu'
|
||||||
,array($this, '_removePreCB')
|
,array($this, '_removePreCB')
|
||||||
,$this->_html);
|
,$this->_html);
|
||||||
|
|
||||||
// replace TEXTAREAs with placeholders
|
// replace TEXTAREAs with placeholders
|
||||||
$this->_html = preg_replace_callback(
|
$this->_html = preg_replace_callback(
|
||||||
'/\\s*<textarea(\\b[^>]*?>[\\s\\S]*?<\\/textarea>)\\s*/i'
|
'/\\s*<textarea(\\b[^>]*?>[\\s\\S]*?<\\/textarea>)\\s*/iu'
|
||||||
,array($this, '_removeTextareaCB')
|
,array($this, '_removeTextareaCB')
|
||||||
,$this->_html);
|
,$this->_html);
|
||||||
|
|
||||||
// trim each line.
|
// trim each line.
|
||||||
// @todo take into account attribute values that span multiple lines.
|
// @todo take into account attribute values that span multiple lines.
|
||||||
$this->_html = preg_replace('/^\\s+|\\s+$/m', '', $this->_html);
|
$this->_html = preg_replace('/^\\s+|\\s+$/mu', '', $this->_html);
|
||||||
|
|
||||||
// remove ws around block/undisplayed elements
|
// remove ws around block/undisplayed elements
|
||||||
$this->_html = preg_replace('/\\s+(<\\/?(?:area|article|aside|base(?:font)?|blockquote|body'
|
$this->_html = preg_replace('/\\s+(<\\/?(?:area|article|aside|base(?:font)?|blockquote|body'
|
||||||
.'|canvas|caption|center|col(?:group)?|dd|dir|div|dl|dt|fieldset|figcaption|figure|footer|form'
|
.'|canvas|caption|center|col(?:group)?|dd|dir|div|dl|dt|fieldset|figcaption|figure|footer|form'
|
||||||
.'|frame(?:set)?|h[1-6]|head|header|hgroup|hr|html|legend|li|link|main|map|menu|meta|nav'
|
.'|frame(?:set)?|h[1-6]|head|header|hgroup|hr|html|legend|li|link|main|map|menu|meta|nav'
|
||||||
.'|ol|opt(?:group|ion)|output|p|param|section|t(?:able|body|head|d|h||r|foot|itle)'
|
.'|ol|opt(?:group|ion)|output|p|param|section|t(?:able|body|head|d|h||r|foot|itle)'
|
||||||
.'|ul|video)\\b[^>]*>)/i', '$1', $this->_html);
|
.'|ul|video)\\b[^>]*>)/iu', '$1', $this->_html);
|
||||||
|
|
||||||
// remove ws outside of all elements
|
// remove ws outside of all elements
|
||||||
$this->_html = preg_replace(
|
$this->_html = preg_replace(
|
||||||
'/>(\\s(?:\\s*))?([^<]+)(\\s(?:\s*))?</'
|
'/>(\\s(?:\\s*))?([^<]+)(\\s(?:\s*))?</u'
|
||||||
,'>$1$2$3<'
|
,'>$1$2$3<'
|
||||||
,$this->_html);
|
,$this->_html);
|
||||||
|
|
||||||
// use newlines before 1st attribute in open tags (to limit line lengths)
|
// use newlines before 1st attribute in open tags (to limit line lengths)
|
||||||
$this->_html = preg_replace('/(<[a-z\\-]+)\\s+([^>]+>)/i', "$1\n$2", $this->_html);
|
$this->_html = preg_replace('/(<[a-z\\-]+)\\s+([^>]+>)/iu', "$1\n$2", $this->_html);
|
||||||
|
|
||||||
// fill placeholders
|
// fill placeholders
|
||||||
$this->_html = str_replace(
|
$this->_html = str_replace(
|
||||||
@@ -198,7 +198,7 @@ class Minify_HTML
|
|||||||
$openStyle = "<style{$m[1]}";
|
$openStyle = "<style{$m[1]}";
|
||||||
$css = $m[2];
|
$css = $m[2];
|
||||||
// remove HTML comments
|
// remove HTML comments
|
||||||
$css = preg_replace('/(?:^\\s*<!--|-->\\s*$)/', '', $css);
|
$css = preg_replace('/(?:^\\s*<!--|-->\\s*$)/u', '', $css);
|
||||||
|
|
||||||
// remove CDATA section markers
|
// remove CDATA section markers
|
||||||
$css = $this->_removeCdata($css);
|
$css = $this->_removeCdata($css);
|
||||||
@@ -226,7 +226,7 @@ class Minify_HTML
|
|||||||
|
|
||||||
// remove HTML comments (and ending "//" if present)
|
// remove HTML comments (and ending "//" if present)
|
||||||
if ($this->_jsCleanComments) {
|
if ($this->_jsCleanComments) {
|
||||||
$js = preg_replace('/(?:^\\s*<!--\\s*|\\s*(?:\\/\\/)?\\s*-->\\s*$)/', '', $js);
|
$js = preg_replace('/(?:^\\s*<!--\\s*|\\s*(?:\\/\\/)?\\s*-->\\s*$)/u', '', $js);
|
||||||
}
|
}
|
||||||
|
|
||||||
// remove CDATA section markers
|
// remove CDATA section markers
|
||||||
@@ -253,6 +253,6 @@ class Minify_HTML
|
|||||||
|
|
||||||
protected function _needsCdata($str)
|
protected function _needsCdata($str)
|
||||||
{
|
{
|
||||||
return ($this->_isXhtml && preg_match('/(?:[<&]|\\-\\-|\\]\\]>)/', $str));
|
return ($this->_isXhtml && preg_match('/(?:[<&]|\\-\\-|\\]\\]>)/u', $str));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user