如何替换 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>)
这将匹配任何不在文本区域标签之间的换行符。
我有一个 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>)
这将匹配任何不在文本区域标签之间的换行符。