PHP和Mysql,nl2br和验证错误

时间:2017-10-06 06:37:39

标签: php mysql

我有一个文本区域,用户可以输入文本和标签,并将其保存到 mysql 以供例外使用:

This is some text
<table>
<tr>
<td>
   blah
   blah
   blah
</td>
</tr>
<table>

如果我使用:

,当我将文本输出到html页面时
nl2br($text);

在包含标签的每一行的末尾都会添加换行符:

This is some text<br/>
<table><br/>
<tr><br/>
<td><br/>
   blah<br/>
   blah<br/>
   blah<br/>
</td><br/>
</tr><br/>
<table><br/>

显然我得到验证错误,因为标签之间存在换行符,例如:

<tr><br/>
<td><br/>

如果我不使用nl2br,根本就没有换行符。我该怎么办?

1 个答案:

答案 0 :(得分:2)

您可以随时尝试删除传递给nl2br后标记后的任何br标记。

这一个班轮可能有所帮助。

<?php 

$stringToStore = str_replace('><br />', '>', nl2br($originalString));

希望这有帮助!

编辑:未经测试但为了更好地捕获html标签,您可以使用正则表达式替换。

<?php

$stringToStore = preg_replace('/(<.*>)<br\s*\\/?>/', '$1', nl2br($originalString));

正则表达式基本上说:

  • < >内的所有内容捕获后跟<br />
  • <.*>周围的括号表示我们可以使用 $ 1 访问的捕获组(因为它是第一个caputre组)
  • 使用抓住的标记替换标记后跟<br />
  • 这将接受<br /><br/><br>

就像我说的,这个未经测试但应该有效。