为了压缩我的PHP网站,我用ob_start函数删除了所有的换行符和不需要的空格。但是,因为我使用了一些代码(编程语言标记),这是换行符敏感的,所以当文本位于pre标记之间时,我希望保留这些换行符和空格。
<?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");
?>我正在为正则表达式而苦苦挣扎,所以我希望在这个问题上能得到一些帮助。提前感谢
发布于 2016-06-04 04:58:32
如果我很理解你,你可能会想试试这个..
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标签的特定页面。我是说,这值得你费心..?
发布于 2016-06-04 05:21:05
也许可以使用跳过/失败动词来实现这一点
查找(?:<pre>.*?</pre>(*SKIP)(*FAIL)|\s+)
替换" "
(?:
<pre> .*? </pre>
(*SKIP)(*FAIL)
| \s+
)https://stackoverflow.com/questions/37623110
复制相似问题