我正在使用一种方法来压缩HTML。以下是功能
function compress_page($buffer) {
$search = array(
'/\>[^\S ]+/s', /*strip whitespaces after tags, except space*/
'/[^\S ]+\</s', /*strip whitespaces before tags, except space*/
'/(\s)+/s', /*shorten multiple whitespace sequences*/
);
$replace = array(
'>',
'<',
'\\1',
);
$buffer = preg_replace($search, $replace, $buffer);
return $buffer;
}
函数正在运行,但问题是,在实现之后,germam字符不再显示了。它们显示为“ ”。你能帮我找问题吗? 我尝试了其他方法来缩小HTML但得到同样的问题。
答案 0 :(得分:0)
可能是因为你没有为正则表达式添加Unicode标志支持。
无论如何,我写了一个缩小的代码:
function sanitize_output($buffer, $type = null) {
$search = array(
'/\>[^\S ]+/s', // strip whitespaces after tags, except space
'/[^\S ]+\</s', // strip whitespaces before tags, except space
'/(\s)+/s', // shorten multiple whitespace sequences
'/<!--(.|\s)*?-->/', // Remove HTML comments
'#/\*(.|\s)*\*/#Uu' // Remove JS comments
);
$replace = array(
'>',
'<',
' ',
'',
''
);
if( $type == 'html' ){
// Remove quets of attributs
$search[] = '#(\w+=)(?:"|\')((\S|\.|\-|/|_|\(|\)|\w){1,8})(?:"|\')#u';
$replace[] = '$1$2';
// Remove spaces beetween tags
$search[] = '#(>)\s+(<)#mu';
$replace[] = '$1$2';
}
$buffer = str_replace( PHP_EOL, '', preg_replace( $search, $replace, $buffer ) );
return $buffer;
}
答案 1 :(得分:0)
经过研究,我找到了这个解决方案。这将在一行中缩小完整的html。
function pt_html_minyfy_finish( $html ) {
$html = preg_replace('/<!--(?!s*(?:[if [^]]+]|!|>))(?:(?!-->).)*-->/s', '', $html);
$html = str_replace(array("\r\n", "\r", "\n", "\t"), '', $html);
while ( stristr($html, ' '))
$html = str_replace(' ', ' ', $html);
return $html;
}
希望这会对某人有所帮助!