Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在html标记属性值内转义_Html_Escaping - Fatal编程技术网

在html标记属性值内转义

在html标记属性值内转义,html,escaping,Html,Escaping,我很难理解转义在javascript的html标记属性值中是如何工作的 我被引导相信您应该总是转义&'“。因此,对于javascript作为属性值,我尝试了: <a href="javascript:alert(&apos;Hello&apos;);"></a> 它不起作用。但是: <a href="javascript:alert(&#39;Hello&#39;);"></a> 及 在所有浏览器中都

我很难理解转义在javascript的html标记属性值中是如何工作的

我被引导相信您应该总是转义&'“<>。因此,对于javascript作为属性值,我尝试了:

<a href="javascript:alert(&apos;Hello&apos;);"></a>

它不起作用。但是:

<a href="javascript:alert(&#39;Hello&#39;);"></a>


在所有浏览器中都能工作


现在我完全糊涂了。如果我所有的属性值都用双引号括起来,这是否意味着我不必转义单引号?或者apos和ascii 39在技术上是不同的字符吗?以至于javascript需要ascii 39,而不是apos?

&apos;
是无效的。您应该使用
&39;
来转义这里涉及两种类型的“转义”,HTML和JavaScript。在解释HTML文档时,首先解析HTML转义

就HTML而言,属性值中的规则与其他地方的规则相同,另外还有一条规则:

  • 少于字符的
    (或任何其他数据字符),但这是不需要的

    在JavaScript方面,有一些字符串文本的转义机制(带有
    \
    )。但这是另一个问题,与您的情况无关


    在您的示例中,在符合当前规范的浏览器上,JavaScript解释器会看到完全相同的代码
    alert('Hello')。浏览器具有“未缩放”
    &apos
    '
    。我有点惊讶于这里的
    &apos
    现在并没有得到普遍支持,但这不是一个问题:在HTML中很少需要转义Ascii撇号(转义仅在属性值中需要,并且仅当您使用Ascii撇号作为分隔符时才需要),如果需要转义,您可以使用
    '参考。

    好的,我刚刚发现&apos;实际上不是HTML中的引用实体,不管w3schools怎么说()我认为
    &apos
    的定义很好。出于好奇,请您详细说明什么时候需要逃过和什么时候不需要?@RakeshPai,这取决于HTML版本。根据HTML4.01规则,如果紧跟Ascii字母(a-z,a-z)或紧跟数字符号
    #
    和Ascii字母,则必须转义与。这是有意义的,因为它会与其他类型的HTML实体冲突。谢谢。假设你想打败XSS,这个建议很糟糕。“转义&、”、'、`、!、@、$、%,(,),=,+,{,},[,和]几乎足够了“正如您引用的文章所述,“上面的所有字符(包括空格字符!)都可以用来打破一个不带引号的HTML属性值”。虽然可能没有任何缺点(性能除外)若要转义所有这些字符,若要扩展HTML属性值中的占位符,只需在属性值周围使用引号就更容易了。
    <a href="javascript:alert('Hello');"></a>