7

我在脑海中转来转去,试图决定如何最好地将换行符存储在 MySQL 数据库中。

一点背景;要求用户完成一个文本区域。这必须存储在 MySQL 数据库中,然后才能被读出并包含在 HTML 电子邮件中。

我应该将它们存储为:

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

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

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

非常感谢任何帮助。

4

3 回答 3

11

按原样保存,但先逃跑。这是您的选择 1. 当您需要呈现此数据时,应用您需要对其进行格式化的任何函数。如果您需要在 HTML 使用nl2br()htmlentities()功能中显示它。这也适用于邮件。

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

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

将其转义后按原样存储,或使用准备好的语句。

$text = $mysqli->real_escape_string($text);
于 2013-01-03T12:22:32.817 回答
2

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

将所有换行符转换为文本区域中的转义文字,同时形成 url 或 post 字符串。

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

于 2014-03-25T10:17:16.087 回答
0

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

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

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

此外,您可能还需要其他 HTML 标记(例如<b>粗体或<center>)。

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

还有一件事 - 你可以用两种方式存储它们: -<br>对于 HTML 视图 -\r\n对于 HTML 源代码(添加一些换行符并制作更易读的 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>
于 2013-01-03T12:16:36.007 回答