如何使用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.
答案 0 :(得分:2)
如何使用preg_replace在HTML标记内删除新行?
技术上是的,但实际上,HTML并不关心新行,每个多个空格字符实际上都是单个字符。如您的示例所示,您将\ n替换为空格或\ t,因此它实际上是相同的,这使我能够执行以下操作:
$html = preg_replace('~(>[^>]*)(*BSR_ANYCRLF)\R([^<]*<)~', '$1 $3', $html);
请参阅:php regex to match outside of html tags和How 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,并删除它们。