我正在寻找一种在加载html之前将外部css文件,甚至内联css代码与php
组合在一起的方法,然后将它们添加到包含页面中所有css代码的外部文件中。
我也希望为js
文件添加此功能。
目前我有一个minify html函数,可以从html中删除空格和新行。
function _minify_html($input) {
return preg_replace_callback('#<\s*([^\/\s]+)\s*(?:>|(\s[^<>]+?)\s*>)#', function($m) {
if(isset($m[2])) {
return '<' . $m[1] . preg_replace(
array(
// From `defer="defer"`, `defer='defer'`, `defer="true"`, `defer='true'`, `defer=""` and `defer=''` to `defer` [^1]
'#\s(checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped)(?:=([\'"]?)(?:true|\1)?\2)#i',
// Remove extra white-space(s) between HTML attribute(s) [^2]
'#\s*([^\s=]+?)(=(?:\S+|([\'"]?).*?\3)|$)#',
// From `<img />` to `<img/>` [^3]
'#\s+\/$#'
),
array(
// [^1]
' $1',
// [^2]
' $1$2',
// [^3]
'/'
),
str_replace("\n", ' ', $m[2])) . '>';
}
return '<' . $m[1] . '>';
}, $input);
}
function minifyHtml($buffer) {
$buffer = _minify_html($buffer);
return
// remove ws outside of all elements
preg_replace( '/>(?:\s\s*)?([^<]+)(?:\s\s*)?</s', '>$1<',
// remove ws around all elems excepting script|style|pre|textarea elems
preg_replace(
'/\s+(<\\/?(?!script|style|pre|textarea)\b[^>]*>)/i', '$1',
// trim line start
preg_replace( '/^\s\s*/m', '',
// trim line end
preg_replace( '/\s\s*$/m', '',
// remove HTML comments (not containing IE conditional comments)
preg_replace_callback(
'/<!--[^ShowThitComment]([\s\S]*?)-->/',
function( $m ) {
return ( 0 === strpos($m[1], '[' ) || false !== strpos( $m[1], '<![' ) ) ? $m[0] : '';
},
// start point
$buffer
)
)
)
)
)
;
}
提前致谢