特殊字符显示无效

时间:2017-09-05 05:31:07

标签: php html compression

我正在使用一种方法来压缩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但得到同样的问题。

2 个答案:

答案 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;
}

希望这会对某人有所帮助!