如何替换 HTML 内容中的所有新行但保留 textarea 中的新行?

How to replace all new lines in HTML content but preserve new lines inside textarea?

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

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

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

问题是当我在内容中有一个文本区域时,新的文本区域行也会丢失。我试过用几种方法来做正则表达式,但我得不到结果,因为我对正则表达式很意外。

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

<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>

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

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

输出:

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

虽然不完美,但更接近。

(?!<textarea[^>]*?>)(\n)(?![^<]*?<\/textarea>)

这将匹配任何不在文本区域标签之间的换行符。