PHP,MySQL,引号和输入字段

时间:2014-09-15 16:42:11

标签: php mysql input quotes

我正在尝试构建一个编辑页面来编辑标题。

此标题将同时显示在“h3”标记和输入字段中。 当用户对标题感到满意时,他将其提交给保存它的mysql。 页面刷新,他可以在“h3”标签和输入字段中看到他的新标题。

问题在于,当标题中包含引号时,我在“h3”标记和输入字段中得不到相同的结果。

以下是检索变量以将其发送到数据库的方法:

$title_set = $_POST['title'];

以下是我在标记和输入字段中显示变量的方法:

$title_get = $result['denomination'];

这里有标题显示: L'appel de la“forêt”

$title_set = $_POST['title'];
$title_get = $result['denomination'];

<h3>  -> No output
Input -> No output

变化1:

$title_set = addslashes($_POST['title']);
$title_get = $result['denomination'];

<h3>  -> L'appel de la "forêt"
Input -> L'appel de la

变化2:

$title_set = addslashes($_POST['title']);
$title_get = stripslashes($result['denomination']);

<h3>  -> L'appel de la "forêt"
Input -> L'appel de la

变化3:

$title_set = mysql_real_escape_string ($_POST['title']);
$title_get = $result['denomination'];

<h3>  -> L'appel de la "forêt"
Input -> L'appel de la

显然,标题标签和输入字段管理显示带引号的动态数据的方式存在差异,输入字段的限制性更强。

那么,我该怎么办?

我的页面,脚本和数据库以UTF_8

编码

2 个答案:

答案 0 :(得分:1)

在将数据插入数据库之前,请使用mysql_real_escape_string()之类的转义函数。或者甚至更好,切换到PDO,以便您可以使用准备好的查询并将数据作为参数提交。这可以防止SQL注入。见How can I prevent SQL-injection in PHP?

在回显HTML之前,您从数据库中获取的动态内容,使用htmlspecialchars()对其进行编码。这可以防止跨站点脚本(XSS)。见How to prevent XSS with HTML/PHP?

进一步阅读:https://www.owasp.org/index.php/OWASP_Top_Ten_Cheat_Sheet了解有关注射和XSS风险和补救措施的更多信息。

答案 1 :(得分:0)

将值插入MySQL查询时,需要使用mysql_real_escape_string()。否则,输入中的引号将导致SQL语法错误。如果转换为MySQLI或PDO并使用查询参数而不是字符串连接,那会更好。

在检索数据并将其显示在网页上时,您应该使用htmlentities()。这将生成所有特殊字符的正确HTML编码。