首页 > 解决方案 > 如何替换 HTML 内容中的所有新行但在 textarea 中保留新行?

问题描述

我有一个存储所有缓冲输出的 PHP 系统,在转储它之前,我删除了空白中的所有新行和空格。这行得通。

$content = Buffer::getKill();
$content = preg_replace(
[
    '/[\n\r]|/',
    '# {2,}#',
    '#> <#'
],
[
    '',
    ' ',
    '><'
],
$content
);

我试图改变的 reponsavel 模式如下'/[\n\r]|/',但我没有成功。

问题是当我在内容中有一个 textarea 时,新的 textarea 行也会丢失。我尝试以多种方式执行正则表达式,但我无法获得结果,因为我对正则表达式感到意外。

下面是一个示例代码及其输出。

<html>
    <body>
        <div>
            <textarea>
                The
                Content
                Here 
            </textarea>
        </div> 
    </body>
</html>

输出

<html><body><div><textarea>TheContentHere</textarea></div></body></html>

预期的

<html><body><div><textarea>
    The
    Content
    Here
</textarea></div></body></html>

标签: phphtmlregexpreg-replace

解决方案


这是一个查找 a 的正则表达式>,后跟换行符(\n\r\n),后跟任意数量的空格和 a <

$html = preg_replace('#>[\n\r\n]?\s+<#', '><', $html);

哪个输出:

<html><body><div><textarea> 
     The 
     Content 
     Here 
     </textarea></div></body></html>

这不是完美的,但更接近。


推荐阅读