首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >除去代码标记之间的代码之外的新行

问除去代码标记之间的代码之外的新行
EN

Stack Overflow用户
提问于 2016-06-04 04:45:25
回答 2查看 41关注 0票数 0

为了压缩我的PHP网站,我用ob_start函数删除了所有的换行符和不需要的空格。但是,因为我使用了一些代码(编程语言标记),这是换行符敏感的,所以当文本位于pre标记之间时,我希望保留这些换行符和空格。

代码语言:javascript
复制
<?php 

  session_start(); 

  function callback($buffer) {

    $search = array(
          '/\>[^\S ]+/s', 
          '/[^\S ]+\</s',  
          '/(\s)+/s',     
          '/(\n)+/s',  
    );

    $replace = array(
          '>',
          '<',
          '\\1',
          ''
    );

    $buffer = preg_replace($search, $replace, $buffer);

    return $buffer;
  }

  ob_start("callback"); 

?>

我正在为正则表达式而苦苦挣扎,所以我希望在这个问题上能得到一些帮助。提前感谢

EN

回答 2

Stack Overflow用户

发布于 2016-06-04 04:58:32

如果我很理解你,你可能会想试试这个..

代码语言:javascript
复制
function oneLine($str)
{   // HTML code to a single line
    return((strpos($str,"</pre>")) ? $str:preg_replace('/\s+/',' ',$str));
}

上面的代码将擦除所有制表符/换行符/换行符,并将这些字符转换为单个空格,使整个字符串成为一行。但是,如果发现了</pre>结束标记,则不会发生任何事情。

结论?如果你的页面内容不是一次回显,而是你有$head,$nav,$aside,$article (等等)然后逐段输出这些代码,然后使用echo(oneLine($nav)) *(依此类推)就可以了。

即使你没有,但是你在一次拍摄中就吐出了所有的东西,例如:echo(oneLine($request));,你没有过多的预格式化文本,或者只有几个页面显示了一些代码示例,等等。为了非裁剪的时尚,“牺牲”了那些带有pre标签的特定页面。我是说,这值得你费心..?

票数 0
EN

Stack Overflow用户

发布于 2016-06-04 05:21:05

也许可以使用跳过/失败动词来实现这一点

查找(?:<pre>.*?</pre>(*SKIP)(*FAIL)|\s+)

替换" "

代码语言:javascript
复制
 (?:
      <pre> .*? </pre>
      (*SKIP)(*FAIL)
   |  \s+ 
 )
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37623110

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档