我的网站上有一个文本框,我需要存储用户输入的数据库,并在以后检索它。我需要完全按照用户输入的方式存储它,包括特殊字符,回车等等。
我应该在PHP中使用哪个进程将其存储在我的数据库字段(这是一个'text'字段)中?我应该使用PHP的html_encode还是其他类似的东西?
三江源。
编辑:我还需要存储正确的格式,即制表符和多个空格。
答案 0 :(得分:5)
$safetext = mysql_real_escape_string($_POST['text']);
$query = "INSERT INTO my_table (`my_field`) VALUES ('$safetext')";
mysql_query($query);
这应该有效。
答案 1 :(得分:4)
在将数据写入数据存储时,您不应对数据进行html编码 - 这样您也可以将数据用于其他内容(例如电子邮件,PDF文档等)。正如Assaf已经说过的那样:必须通过转义输入或使用参数化插入查询来避免SQL注入。
你应该,不,让我们说,必须然后在HTML页面上显示数据时对数据进行html编码!这将导致危险的HTML或Javascript代码无用,因为数据中的HTML标签将不再被浏览器识别为HTML标签。
当您允许用户在其中发布带有HTML标签的数据时,此过程会稍微复杂一些。然后,您必须跳过输出编码,转而使用输入消毒功能,根据您的需要可以选择复杂(允许使用标签)。
答案 2 :(得分:3)
你没有对进行编码,以便将其存储在mysql中。
确保使用参数化插入命令,以避免SQL注入。
答案 3 :(得分:3)
以下内容应该有效:
if (get_magic_quotes_gpc()) {
$content = stripslashes($content);
}
$content = mysql_real_escape_string($content);
如果您的列是utf8,则不应该遇到特殊字符问题。正确格式化内容后,可以使用标准插入方法将其提供给mysql。
答案 4 :(得分:1)
除了格式化之外,要正确存储用户文本,您只需使用nl2br($inputtext)
将所有换行转换为中断。过滤输入后执行此操作。