我有一个页面,我使用AJAX请求获取选择框选项,从该数据构建一个选择框,然后使用选择框的选定值从AJAX请求返回的响应中获取其他信息(它存储为全局变量)。
因为我在从PHP AJAX处理程序返回数据之前使用htmlentities()
来转义数据(我应该这样做以避免XSS攻击,对吗?),返回数据中的索引/属性名称将被转义。因此,如果AJAX响应对象如下所示:
data:
{
...,
Café: [...],
...
}
然后,一旦我从该数据创建一个选择框选项,并在以后获取选择框的值,如下所示:
$("#select").val();
从选择框中检索的值为Café
。这是一个问题,因为如果我尝试从data
中的那个索引获取某些东西,就像这样:
data[$("#select").val()]
然后我收到索引未定义的错误,因为索引不是Café
,而是Café
。
解决我遇到的问题的最佳方法是什么?可能存在PHP解决方案,例如不能逃避“安全”字符的方法,或者可能有一个好的JavaScript解决方案,那么什么是最佳选择?
编辑:根据ZubaiR的评论,没有必要将从AJAX处理程序返回的数据转义为JSON,这意味着应该解决我的问题。但是,我没有使用AJAX时遇到这个问题(当直接向页面回显数据时),所以我也希望找到一个解决方案。
答案 0 :(得分:0)
我对你的案子做了一点测试并产生了一些奇怪的结果
您可以在jsbin
上进行测试<html>
<head>
<script type="text/javascript" src="http://code.jquery.com/jquery-2.1.0.min.js"></script>
</head>
<body>
<select id="test_select">
<option value="café">café (escaped value)</option>
<option value="café">café (not escaped value)</option>
</select>
<button id="test_button">Click to check my value from data</button>
<script type="text/javascript">
var data = {"café":1, "café":2};
$(function () {
$('#test_button').click(function() {
alert(data[$('#test_select').val()]);
})
})
</script>
</body>
</html>
对于任何选择选项我在jsbin上得到“2”。在我的本地电脑上,第一个是“未定义”,第二个是“2”。
因此,要解决问题,您需要使用café
作为选项值(未转义),也不要转义js值