JavaScript中数据库字段中的撇号

时间:2018-09-11 02:37:06

标签: javascript php mysql mysqli

在使用PHP和Javascript应用处理表单数据时,我犯了一个新手错误,我没有预料到并在文本字段中支持撇号(')。

更麻烦的是,在一个多行的应用程序中,我使用单引号或''将包含HTML的变量和可能包含同一张表中的撇号的变量括起来,而不是使用引号(“”)和转义html。

在我使用PHP函数real_escape_string function修改输入到MySQL数据中的$ _POST数据之前,该函数仍然存储带撇号的文本,不带斜杠。然后接着修改每个用单引号定义变量的实例,然后将其更改为引号(“”),然后转义,然后在这里询问是否遗漏了一些内容。

这是使用上面的PHP / Mysql函数可以处理$ _POST数据的示例

  

$ db-> real_escape_string($ _ POST [“ name”])   其中“名称” = O'Brien   在数据库中存储为O'Brien,而不是O \'Brien

当我将这些数据读入前端时,它是这样完成的:

var options = '<option value="<?php echo $row[$name];?>" selected><?php echo $row[$name];?></option>';

在这些情况下,如果名称中包含撇号,则javascript控制台会在参数列表后引发错误“ Uncaught SyntaxError:missing)”,这是有道理的。

我希望获得有关如何以最少的工作量/最短的时间解决此问题的建议,但以正确的方式进行,在将来使用撇号甚至引号时不会引起任何问题。

1 个答案:

答案 0 :(得分:1)

您应该使用准备好的语句并参数化查询,而不是转义(并且交换报价类型,我不清楚您为什么这样做)。

但是这些方法与您当前的问题无关。当前,您在输出时会遇到封装错误的影响,并且还会接受XSS注入。您应该使用http://php.net/manual/en/function.htmlspecialchars.php来输出到浏览器。

 var options = '<option value="<?php echo htmlspecialchars($row[$name], ENT_QUOTES);?>" selected><?php echo htmlspecialchars($row[$name] , ENT_QUOTES);?></option>';

但是您也应该读https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet#Why_Can.27t_I_Just_HTML_Entity_Encode_Untrusted_Data.3F,因为您使用的是JS,而不是HTML,所以这可能是不够的。