从html源中删除所有换行符

mrN*_*mrN 39 html php obfuscation whitespace line-breaks

我知道混淆是一个坏主意.但我希望我的所有html代码都有一个很长的单行.所有的html标签都是通过PHP生成的,所以我认为它是可能的.我知道\n\r从正则表达式替换,但不知道如何做到这一点.如果我不清楚这里是一个例子

$output = '<p>
              <div class="title">Hello</div>
           </p>';
echo $output;
Run Code Online (Sandbox Code Playgroud)

要在源查看器中查看为 <p><div class="title">Hello</div></p>

ser*_*dev 46

也许这个?

$output = str_replace(array("\r\n", "\r"), "\n", $output);
$lines = explode("\n", $output);
$new_lines = array();

foreach ($lines as $i => $line) {
    if(!empty($line))
        $new_lines[] = trim($line);
}
echo implode($new_lines);
Run Code Online (Sandbox Code Playgroud)

  • trim仅删除结尾处的空格并开始,该行中的所有行都保留 (4认同)
  • 我会说这个更快更可靠. (3认同)
  • @RayL你误解了代码.`\n`是`explode()`必需的 (3认同)
  • 你没有删除'/ n'字符.需要是str_replace(array("\ r \n","\ r","\n"),"",$ output) (2认同)

Svi*_*ish 34

你可以试试这个.

// Before any output
ob_start();

// End of file
$output = ob_get_clean();
echo preg_replace('/^\s+|\n|\r|\s+$/m', '', $output);
Run Code Online (Sandbox Code Playgroud)

这应该,除非我弄乱了正则表达式,捕获所有输出,然后替换所有新行字符以及行末和行开头的所有空格.

如果你已经在变量中收集了所有输出,你当然可以直接使用最后一行并跳过输出缓冲的东西:)


Ray*_*ess 14

为我工作:

$output = str_replace(array("\r\n", "\r", "\n"), "", $output);
Run Code Online (Sandbox Code Playgroud)

  • 为什么在剥离\ r和\n之前剥离\ r \n?首先获得所有\ r \n组合样式中断是否有某种速度优势? (3认同)
  • @jimbo,我不确定速度是否有益. (3认同)
  • 嗯...好问题,呵呵.我想不是吗? (2认同)

krt*_*tek 5

你可以做 :

$output = '<p>'.
              '<div class="title">Hello</div>'.
           '</p>';
Run Code Online (Sandbox Code Playgroud)

这样,$output就不会包含任何行跳转.

这应该也有效:

$output = preg_replace(array('/\r/', '/\n/'), '', $output);
Run Code Online (Sandbox Code Playgroud)