如何只在HTML标记内删除新行

时间:2012-04-05 22:18:49

标签: php preg-replace

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

2 个答案:

答案 0 :(得分: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?

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

答案 1 :(得分: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);

它在&gt;之间寻找换行符。 char和&lt; char,并删除它们。