我正在尝试构建一个编辑页面来编辑标题。
此标题将同时显示在“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
编码答案 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编码。