我如何仅在 HTML 标签内删除新行


How I can remove new lines only inside the HTML tags

如何仅删除带有preg_replace的HTML标签内的新行?

例:

<table>
<tr>
<td></td>
</tr>
</table>
Text here. Text here
Text here.

因此,在函数处理上述代码后,返回应为:

<table>    <tr>    <td></td>    </tr>    </table>
Text here. Text here
Text here.

如何仅删除带有preg_replace的 HTML 标记内的新行?

从技术上讲是的,但实际上,HTML 并不那么关心换行符,每个多个空格字符实际上都被视为一个空格字符。如您的示例所示,您将 ' 替换为空格或 ''t,因此它实际上是相同的,这使我明白您可以执行以下操作:

$html = preg_replace('~(>[^>]*)(*BSR_ANYCRLF)'R([^<]*<)~', '$1 $3', $html);

另请参阅: php 正则表达式以匹配 html 标签之外 和 如何以最聪明的方式替换 PHP 中的不同换行符样式?.

更安全的方法是使用像DOMDocument这样的 HTML 解析器并将片段作为正文加载。然后替换文本节点中的所有换行符,这些换行符是正文子节点的子节点。

可能有更聪明的方法可以做到这一点,但是,这将完成您的工作。

$str = "test'n'n test2 <table>'n'n'n test 3</table>'n'n'n test4 test5";
while ($str2 = preg_replace('/(>[^<]*)'n([^<]*<)/', '''1''2', $str)) {
    if ($str2 == $str) break;
    $str = $str2;
}
echo ($str);

它会在>字符和<字符之间查找换行符,并删除它们。>