我正在尝试<select>
使用jQuery和JSON响应中返回的字符串数组中的选项值动态填充元素。选项值之一是Joe's Cafe
解码时的值Joe's Cafe
。但是,当我使用以下代码时:
$.each(optionVals, function(idx, elem) {
$('#restaurant').append('<option value="' + elem + '">' + elem + '</option>');
});
相应的选项不是我期望的。我看到了:
<option value="Joe's Cafe">Joe's Cafe</option>
代替这个:
<option value="Joe's Cafe">Joe's Cafe</option>
如何防止jQuery'
在.append()
操作中解码HTML实体?我检查了JSON响应,并且HTML实体是完整的。加载选项并将HTML实体解码为单引号后,我检查了源代码'
。
如何防止jQuery
'
在.append()
操作中解码HTML实体?
您不能,因为事实并非如此。
jQuery生成一些HTML,然后使浏览器将其转换为DOM。然后,它将那个DOM片段附加到表示页面的文档DOM上。
当您使用DOM检查器检查DOM(或innerHTML
用于将其转换为字符串)时,您会将DOM序列化为HTML。此时,浏览器不知道(因为它不需要跟踪,因为它不需要跟踪),因此DOM中的撇号是来自文字的撇号还是字符引用。它用来决定如何表示字符的算法使用原义字符(当它可以使用1个可读性更高的字符时,使用5个字符代码毫无意义)。
<option value="Joe's Cafe">Joe's Cafe</option>
和<option value="Joe's Cafe">Joe's Cafe</option>
正在编写的两种不同的方式完全一样的东西在HTML中。你得到的应该没关系。
HTML中可能是同一件事,但存储在数据库中却完全不同。
听起来您想让表单将字符串提交Joe's Cafe
到服务器。
<option value="Joe's Cafe">Joe's Cafe</option>
不会那样做。
这将需要: value="Joe&#39;s Cafe"
现在,您可以通过合理地生成DOM而不是将字符串混在一起来实现(因为将字符串混在一起时,HTML中具有特殊含义的字符将被视为具有特殊含义)。
$('#restaurant').append(
$("<option />").val(elem).text(elem)
);
但是,您的含义是数据中包含原始撇号会破坏您的SQL。
这意味着您容易受到SQL注入攻击的威胁,真正的解决方案是修复此服务器端。
请参阅如何防止PHP中的SQL注入?或者查找如何使用准备好的语句来防止以服务器上使用的任何编程语言进行SQL注入。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句