javascript中数据库字段的撇号

javascript中数据库字段的撇号,javascript,php,mysql,mysqli,Javascript,Php,Mysql,Mysqli,我在用我的PHP和Javascript应用程序处理表单数据时犯了一个新手错误,我没有预料到并支持文本字段中的撇号(') 更麻烦的是,在一个一万行的应用程序中,我使用单引号或“”来括起包含HTML的变量和可能包含同一表中撇号的变量,而不是使用引号(“”)和转义HTML 在我修改使用PHP函数输入MySQL数据的$_POST数据之前,PHP函数仍然存储带撇号的文本,没有斜杠。接下来,修改每个用撇号定义变量的实例,将其改为引号(“”),然后转义,我想问一下我是否遗漏了什么 下面是我可以使用上面的PHP

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

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

在我修改使用PHP函数输入MySQL数据的$_POST数据之前,PHP函数仍然存储带撇号的文本,没有斜杠。接下来,修改每个用撇号定义变量的实例,将其改为引号(“”),然后转义,我想问一下我是否遗漏了什么

下面是我可以使用上面的PHP/Mysql函数对$\u POST数据执行的一个示例

$db->real\u escape\u字符串($\u POST[“name”]) 其中“name”=O'Brien 在数据库中存储为O'Brien,而不是O'Brien

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


var options='您应该使用准备好的语句并参数化查询,而不是转义(以及交换引号类型,我不清楚为什么要这样做)

但是,这些方法与您当前的问题无关。目前,您正在体验输出时不正确封装的影响,并且可能会接受XSS注入。您应该使用以输出到浏览器

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

var options=”那么,为什么不直接用双引号将js括起来,然后转义其中的双引号呢?似乎它会起作用。这将是太多的工作,但也试图理解在这里要做的正确的事情。
var options=“是的……成千上万的语句包含不同的变量和语句。我将接受您的建议,进一步了解预处理语句和参数化查询。在这种情况下,所有MYSQL查询都在不同的文件中运行,因此您是否建议我尝试在源代码处使用htmlspecialchars?同样关于XSS注入,我现在面临着这样的风险,因为存在某些表单字段,当通过$u POST提交时,这些表单字段在javascript代码中被调用,这些代码具有不正确的封装。你建议如何纠正这一点?如果我用双引号(“)封装变量,如果文本包含“”,我不会有同样的问题吗?如果你转换为实体,你将没有引号,你将有
'
"(我想,可能是
无论哪种方式它都不会坏).
htmlspecialchars
应该用于输出,我不清楚你在源代码中的意思,但如果你是指在存储时,那么没有。明白了,所以使用mysql的函数来存储撇号项,并专门输出每个和所有文本字段的htmlspecialchars,对吗?基本上,如果你要输出到JS,尽管要小心som像
alert(js_var);
这样的东西仍然会触发,因为它们都不是特殊字符。如果用引号封装,虽然会很安全,因为它只是一个字符串。我只是想说,我最终努力使用准备好的语句重新编写,感觉好多了。