我在网页上有一个下拉列表,当值字符串包含引号时,它会断开。
值为"asd
但在DOM中始终显示为空字符串。
我已经尝试过我所知道的各种方法来正确地逃避字符串,但无济于事。
<option value=""asd">test</option>
<option value="\"asd">test</option>
<option value=""asd">test</option>
<option value=""asd">test</option>
知道如何在页面上呈现此内容,以便回发消息包含正确的值吗?
答案 0 :(得分:296)
"
是正确的方法,第三个测试:
<option value=""asd">test</option>
您可以在下方或jsFiddle上看到此功能。
alert($("option")[0].value);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select>
<option value=""asd">Test</option>
</select>
或者,您可以使用单引号分隔属性值:
<option value='"asd'>test</option>
答案 1 :(得分:14)
如果您使用的是PHP,请尝试拨打htmlentities
或htmlspecialchars
功能。
答案 2 :(得分:9)
每HTML syntax,甚至HTML5,以下都是有效选项:
v=spf1 mx include:zoho.com include:myotherdomain.com -all
请注意,如果您使用XML syntax,则需要引号(单引号或双引号)。
答案 3 :(得分:7)
另一种选择是用单引号替换双引号,如果你不介意它是什么。但我没有提到这个:
<option value='"asd'>test</option>
我提到了这个:
<option value="'asd">test</option>
就我而言,我使用了这个解决方案。
答案 4 :(得分:0)
你真的应该只允许不受信任的数据进入良好属性的白名单,例如:align,alink,alt,bgcolor,border,cellpadding,cellspacing,class,color,cols,colspan,coords,dir,face,height,hspace, ismap,lang,marginheight,marginwidth,multiple,nohref,noresize,noshade,nowrap,ref,rel,rev,rows,rowspan,scrolling,shape,span,summary,tabindex,title,usemap,valign,value,vlink,vspace,宽度
您确实希望将不受信任的数据保存在javascript处理程序以及id或name属性中(它们可以破坏DOM中的其他元素)。
此外,如果您将不受信任的数据放入SRC或HREF属性,那么它实际上是一个不受信任的URL,因此您应该验证URL,确保它不是javascript:URL,然后是HTML实体编码。
有关此处所有内容的更多详情:https://www.owasp.org/index.php/Abridged_XSS_Prevention_Cheat_Sheet
答案 5 :(得分:0)
如果您使用的是Javascript和Lodash,则可以使用_.escape(),以转义“,”,<,>和&。
答案 6 :(得分:-3)
无法在输入文本的值中转义引号...但是您可以使用javascript(或jquery):
<input type="input" name="myinput" id="myinput" value="" />
<script>document.getElementById("myinput").value="This input has a [\"]";</script>