如何正确地转义HTML属性内的引号?

我有一个网页下拉,当价值string包含一个报价。

值是"asd但在DOM中总是显示为空string。

我已经尽了各种方法试图逃避绳子,但无济于事。

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

任何想法如何在页面上呈现这样的回发消息包含正确的值?

&quot; 是正确的方法,你的testing的第三个:

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

你可以在这里看到一个jsFiddle的例子。 或者,您可以用单引号分隔属性值:

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

如果您使用PHP,请尝试调用htmlentitieshtmlspecialchars函数。

另一个select是用单引号replace双引号,如果你不介意的话。 但是我不提这个:

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

我提到这个:

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

在我的情况下,我用这个解决scheme。

根据HTML语法 ,甚至HTML5 ,以下都是有效的选项:

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

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

这是一个jsfiddle显示所有上述工作 。

你真的应该只允许不受信任的数据进入一个好的属性的白名单,比如:align,alink,alt,bgcolor,border,cellpadding,cellspacing,class,colours,colspan,coords,dir,face,height,hspace,ismap,lang ,marginheight,marginwidth,multiple,nohref,noresize,noshade,nowrap,ref,rel,rev,rows,rowspan,滚动,shape,span,summary,tabindex,title,usemap,valign,value,vlink,vspace,width

你真的想保持不受信任的数据的JavaScript处理程序以及ID或名称属性(他们可以打破DOM中的其他元素)。

此外,如果您将不可信数据放入SRC或HREF属性,那么它确实是一个不可信的URL,因此您应该validationURL,确保其不是javascript:URL,然后是HTML实体编码。

更多细节在这里: https : //www.owasp.org/index.php/Abridged_XSS_Prevention_Cheat_Sheet