首页 文章

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

提问于
浏览
203

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

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

我已经尝试过各种我认识的方法来正确地逃避弦乐但无济于事 .

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

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

6 回答

  • -2

    &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>
    
  • 0

    如果您使用的是PHP,请尝试调用htmlentitieshtmlspecialchars函数 .

  • 6

    HTML syntax,甚至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 syntax,则需要引号(单引号或双引号) .

    Here's a jsfiddle showing all of the above working .

  • 7

    另一个选择是用单引号替换双引号,如果你不介意它是什么 . 但我没有提到这个:

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

    我提到这个:

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

    就我而言,我使用了这个解决方案 .

  • 12

    你真的应该只允许不受信任的数据进入良好属性的白名单,例如: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,width

    你真的想要从javascript处理程序以及id或name属性中保留不受信任的数据(它们可以破坏DOM中的其他元素) .

    此外,如果您将不受信任的数据放入SRC或HREF属性,那么它实际上是一个不受信任的URL,因此您应该验证URL,确保它不是javascript:URL,然后是HTML实体编码 .

    关于这里所有的更多细节:https://www.owasp.org/index.php/Abridged_XSS_Prevention_Cheat_Sheet

  • 280

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

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

相关问题