php
1<?php
2$table =<<<EOF
3<table>
4 <tr>
5 <td></td>
6 <td></td>
7 <td></td>
8 </tr>
9 <tr>
10 <td></td>
11 <td></td>
12 <td></td>
13 </tr>
14 <tr>
15 <td></td>
16 <td></td>
17 <td></td>
18 </tr>
19 <tr>
20 <td></td>
21 <td></td>
22 <td></td>
23 </tr>
24</table>
25EOF;
26
27echo nl2br($table);
結果
<table><br />
<tr><br />
<td></td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr><br />
<td></td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr><br />
<td></td><br />
<td></td><br />
<td></td><br />
</tr><br />
<tr><br />
<td></td><br />
<td></td><br />
<td></td><br />
</tr><br />
</table>
それをブラウザ(Chrome)で
どういう形でデータを保持してるか分からないですけど、htmlspecialchars_decode()でHTMLに戻せるなら<br />も保持してるのでは。それならnl2br()不要ですよね。
それかteratailみたいにマークダウン形式で保持するか、ですね。
先にnl2br()かけてからhtmlspecialchars_decode()でもいいかもしれませんけど。