我应该如何在MySQL数据库中存储换行符?

时间:2013-01-03 12:12:45

标签: php html mysql newline

我在脑海中四处奔波,试图决定如何在MySQL数据库中存储新行。

一点背景;要求用户填写文本区域。这必须在被回读之前存储在MySQL数据库中,并且内容包含在HTML电子邮件中。

我应该将它们存储为:

1)字符串文字 - 这肯定是危险和不好的做法

2)作为一个带有\r\n的字符串 - 当我从数据库中读回来时,它读取为4个字符,因此nl2br()无法正确替换它们。

3)由于HTML <br /> - 因为它必须是html实体编码才能存储,所以它最终会被存储为&lt;br /&gt;所以当它到达电子邮件<br />时会被打印出来而不是实际换行。通过html_entity_decode()传递它将解码需要编码的其他字符。

任何帮助都非常感激。

3 个答案:

答案 0 :(得分:9)

按原样存储,但先逃避。这是您的选择1.当您需要提供此数据时,应用您需要格式化的任何功能。如果您需要在HTML中显示,请使用nl2br()htmlentities()函数。这也适用于邮件。

如果您有这样的文本区域数据,

$text="Hello Sir,
I am Robert'); Drop table students; --
.....
Yours most obedient pupil
.....";

在逃避它之后,只需将其存储起来,或者使用准备好的声明。

$text = $mysqli->real_escape_string($text);

答案 1 :(得分:2)

使用javascript字符串替换函数str.replace(/\n/g,'\\n')

将所有换行转换为textarea中的转义文字,同时形成网址或帖子字符串。

使用PHP json_encode()检索相同内容并通过textarea显示它对我来说很有效。

答案 2 :(得分:0)

这取决于应用程序类型(您希望如何显示文本)。

如果这是HTML电子邮件编辑器 - 我认为html格式会更好。

在大多数CMS(内容管理系统)中使用HTML格式(joomla,wordpress,prestashop等),因为您可以从数据库中读取并发送到浏览器。

此外 - 您可能还需要其他HTML代码(例如<b>代表粗体或<center>)。

我认为在Windows窗体控件上显示数据时,使用\r\n格式更适合非Web应用程序。

还有一件事 - 你可以用两种方式存储它们: - <br>用于HTML视图 - HTML源代码\r\n(添加一些换行符并生成更易读的html源代码)

更可读的HTML我的意思是:

<center>
This is header
</center>
<p>
This is paragraph.
<br>
Second line.
</p>

而不是:

<center>This is header</center><p>This is paragraph.<br>Second line.</p>