我正在使用HTML输入元素接受来自用户的数据并将其保存在mySQL数据库中。为此,我使用PHP和mysqli创建一个准备好的语句。
这很有效,直到我尝试接受包含双引号(“)的输入字符串。如果输入字符串包含双引号,则保存的数据将是双引号字符的字符串。
例如:
我看到一个7'9“的人。
将保存为:
我看到了7'9
我搜索过高低,但无法找到解决方案。我已经尝试了mysqli_real_escape_string,但这只是添加了反斜杠来逃避有意义的字符。当与预准备语句结合使用时,反斜杠按字面解释,双引号仍然会中断字符串。 所以我的例子是:
我看到了7 \'9
我甚至认为PHP可能没有从输入元素中获取整个字符串,但是当我回显元素的值时,我确实看到整个字符串。
以下是一些示例代码。我删除了一些商业细节,但这通常是我想要做的。
$sqlSave = $objConnection->prepare('update tbl set Answer=? where ID=?;');
$sqlSave->bind_param("si", $sqlAnswer, $sqlID);
$sqlSave->execute();
我觉得我错过了一些明显的东西,所以请原谅我的无知。任何帮助或其他信息表示赞赏。
答案 0 :(得分:1)
是的,确实这是非常明显的事情。只需查看生成的HTML代码,您就会立即获得线索。
然后用心去深入了解HTML属性必须始终使用htmlspecialchars()
进行编码
答案 1 :(得分:0)
我错了。 PHP正确地保存了数据。当数据显示在HTML输入元素中时,数据被截断。
使用htmlspecialchars()将“转换为"
并显示所有内容。
感谢大家帮助我抓住这个。