我在脑海中四处奔波,试图决定如何在MySQL数据库中存储新行。
一点背景;要求用户填写文本区域。这必须在被回读之前存储在MySQL数据库中,并且内容包含在HTML电子邮件中。
我应该将它们存储为:
1)字符串文字 - 这肯定是危险和不好的做法
2)作为一个带有\r\n
的字符串 - 当我从数据库中读回来时,它读取为4个字符,因此nl2br()
无法正确替换它们。
3)由于HTML <br />
- 因为它必须是html实体编码才能存储,所以它最终会被存储为<br />
所以当它到达电子邮件<br />
时会被打印出来而不是实际换行。通过html_entity_decode()
传递它将解码需要编码的其他字符。
任何帮助都非常感激。
答案 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>