从表单中,我要求用户输入一些文字。我将使用$_POST['text']
检索此文本。
用户输入字符串“这是我的文字!”
$newText = mysql_real_escape_string($_POST['text']);
现在在我将$newText
插入我要显示的数据库后的同一页面上
文本给用户,并使用PHP作为输入文本框的值。
// I want to make sure the user hasn't added any unsafe html in their string
$newText = htmlentities($newText);
echo "You've entered: " . $newText . "<br />";
echo "<form action=someaction.php method=post>";
echo "<input type=text value=\"" . $newText . "\">";
echo "</form>";
输出结果为:
You've entered: It\'s my text!
[It\'s my text!]
如何避免这些斜线,我应该对数据做其他事情吗?
答案 0 :(得分:3)
您正在通过mysql_real_escape_string()
传递文本,顾名思义,它会转义字符串,包括撇号。 mysql_real_escape_string()
仅指 ,用于准备保存到数据库的数据。在向用户显示数据时不应使用它。
因此,解决方案很简单:删除该行并仅使用htmlentities()
。当您将字符串保存到数据库时(并且仅在那时)使用mysql_real_escape_string()
。
答案 1 :(得分:-1)
仅对要在查询中使用的变量使用mysql_real_escape_string()
,因为它会添加斜杠以转义字符串中的某些字符。这适用于mysql,但是当想在页面上使用它时,它看起来很奇怪。
你可以制作2个变量,1个用于MySQL,1个用于显示原始文本。
$text = $_POST['text'];
$db_text = mysql_real_escape($text);
另请注意,您应该对稍后从数据库中获取的数据使用strip_slashes()
来删除斜杠。
希望这一点清楚起来。
答案 2 :(得分:-1)
现在在我将$ newText插入数据库后的同一页面上,我想向用户显示文本
这就是你做错了。
每次成功发送POST请求后,HTTP标准都需要 GET方法重定向
因此,您必须在同一页面上重定向用户,您可以在其中读取数据库中插入的数据并将其显示给用户。
至于你犯的错误 - 只是移动到更接近数据库操作的地方,以确保它仅用于此目的(YET它是必须使用的,没有忘记它的风险!)。
理想情况下,您必须使用一些变量来表示查询中的数据,并使用一些处理程序来处理它们
因此,查询调用可能看起来像
DB::run("UPDATE table SET text=s:text",$_POST['text']);
其中s:text
是一个变量(称为占位符),它将替换为$_POST['text']
值,并根据占位符名称中设置的类型进行适当准备(s
表示“字符串“,告诉你的函数逃脱并引用数据)
因此,所有必要的准备工作都将在内部完成,并且不会破坏任何源变量。
答案 3 :(得分:-2)
使用mysql_real_escape_string()
正常保存当您想以表格形式显示时:
htmlspecialchars(stripslashes($row['text_data']))
它会起作用。