PHP bufffer输出minify,而不是textareapre。

我正在使用缓冲区消毒器,就像在PHP手册上看到的那样,但是在处理textareas中的双换行时遇到了问题。

当从我的数据库中提取一个包含双倍三倍换行符的字符串,并把它放到一个叫做 textarea,新行减少到只有一个新行。

因此。能否让函数排除所有的输出,包括 <pre>, <textarea></pre>, </textarea>?

看到这个问题。如何在不删除IE条件注释的情况下对php html输出进行最小化?我想我需要使用 preg_match但我不知道如何在这个函数中实现它。

我正在使用的函数是

function sanitize_output($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;
}

ob_start("sanitize_output");

是的,我同时使用这个消毒剂和。GZIP 以获得尽可能小的尺寸。

解决方案:

这里是评论中提到的函数的实现。

function sanitize_output($buffer) {

    // Searching textarea and pre
    preg_match_all('#\<textarea.*\>.*\<\/textarea\>#Uis', $buffer, $foundTxt);
    preg_match_all('#\<pre.*\>.*\<\/pre\>#Uis', $buffer, $foundPre);

    // replacing both with <textarea>$index</textarea> / <pre>$index</pre>
    $buffer = str_replace($foundTxt[0], array_map(function($el){ return '<textarea>'.$el.'</textarea>'; }, array_keys($foundTxt[0])), $buffer);
    $buffer = str_replace($foundPre[0], array_map(function($el){ return '<pre>'.$el.'</pre>'; }, array_keys($foundPre[0])), $buffer);

    // your stuff
    $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);

    // Replacing back with content
    $buffer = str_replace(array_map(function($el){ return '<textarea>'.$el.'</textarea>'; }, array_keys($foundTxt[0])), $foundTxt[0], $buffer);
    $buffer = str_replace(array_map(function($el){ return '<pre>'.$el.'</pre>'; }, array_keys($foundPre[0])), $foundPre[0], $buffer);

    return $buffer;
}

总是有优化的空间,但这是可行的。

给TA打赏
共{{data.count}}人
人已打赏
未分类

C++17 如何使用变量模板模仿Julia的'promote_type'函数?

2022-9-7 22:33:19

未分类

在R中从复杂的嵌套JSON中提取整洁的数据。

2022-9-7 22:33:21

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索