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

时间:2018-09-18 15:11:17

标签: php html regex preg-replace

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

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

我尝试更改的响应模式是以下'/[\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>

2 个答案:

答案 0 :(得分:1)

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

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

哪个输出:

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

这还算完美,但是更接近。

答案 1 :(得分:0)

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

这将匹配文本区域标签之间的所有换行符。