0

如何使用 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.
4

2 回答 2

2

如何使用 preg_replace 仅在 HTML 标记内删除新行?

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

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

另请参阅:php regex to match outside of html tagsHow to replace different newline styles in PHP the smartest way?.

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

于 2012-04-05T22:31:56.060 回答
0

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

$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);

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

于 2012-04-05T22:35:08.123 回答