如何正确转义html属性中的引号?

时间:2010-10-25 14:08:07

标签: html xhtml escaping

我在网页上有一个下拉列表,当值字符串包含引号时,它会断开。

值为"asd但在DOM中始终显示为空字符串。

我已经尝试过我所知道的各种方法来正确地逃避字符串,但无济于事。

<option value=""asd">test</option>
<option value="\"asd">test</option>
<option value="&quot;asd">test</option>
<option value="&#34;asd">test</option>

知道如何在页面上呈现此内容,以便回发消息包含正确的值吗?

7 个答案:

答案 0 :(得分:296)

&quot;是正确的方法,第三个测试:

<option value="&quot;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="&quot;asd">Test</option>
</select>

或者,您可以使用单引号分隔属性值:

<option value='"asd'>test</option>

答案 1 :(得分:14)

如果您使用的是PHP,请尝试拨打htmlentitieshtmlspecialchars功能。

答案 2 :(得分:9)

HTML syntax,甚至HTML5,以下都是有效选项:

v=spf1 mx include:zoho.com include:myotherdomain.com -all

请注意,如果您使用XML syntax,则需要引号(单引号或双引号)。

Here's a jsfiddle showing all of the above working

答案 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(),以转义“,”,<,>和&。

参见此处:https://lodash.com/docs/#escape

答案 6 :(得分:-3)

无法在输入文本的值中转义引号...但是您可以使用javascript(或jquery):

<input type="input" name="myinput" id="myinput" value="" />
<script>document.getElementById("myinput").value="This input has a [\"]";</script>