文本输出中的斜杠

时间:2012-04-28 15:04:26

标签: php mysql mysql-real-escape-string html-entities

从表单中,我要求用户输入一些文字。我将使用$_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!]

如何避免这些斜线,我应该对数据做其他事情吗?

4 个答案:

答案 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']))

它会起作用。