我无法理解如何在html标记属性值javascript中进行转义.
我一直相信你应该总是逃避&'"<>.所以对于javascript作为属性值,我试过:
<a href="javascript:alert('Hello');"></a>
Run Code Online (Sandbox Code Playgroud)
它不起作用.然而:
<a href="javascript:alert('Hello');"></a>
Run Code Online (Sandbox Code Playgroud)
和
<a href="javascript:alert('Hello');"></a>
Run Code Online (Sandbox Code Playgroud)
适用于所有浏览器!
现在我完全糊涂了.如果我的所有属性值都用双引号括起来,这是否意味着我不必转义单引号?或者是as和ascii 39技术上不同的角色?这样的javascript需要ascii 39,但不是吗?
Juk*_*ela 35
这里涉及两种类型的"转义",HTML和JavaScript.解释HTML文档时,首先解析HTML转义.
就HTML而言,属性值中的规则与其他地方的规则相同,另外还有一条规则:
<应该转义小于字符.通常<用于此.从技术上讲,根据HTML版本,并不总是需要转义,但它始终是一种很好的做法.&应该逃脱.通常&用于此.这也并非总是强制性的,但总是要比在需要时学习和记忆更简单."作为分隔符,则习惯于使用"while 来转义它的出现,而对于Ascii撇号,实体引用'仅在某些HTML版本中定义,因此最安全的方法是使用数字引用'(或').>如果您愿意,可以转义(或任何其他数据字符),但从不需要它.
在JavaScript方面,\字符串文字中有一些转义机制(with ).但这些是一个不同的问题,与您的情况无关.
在您的示例中,在符合当前规范的浏览器上,JavaScript解释器会看到完全相同的代码alert('Hello');.浏览器有"转义" '或'到'.我对此感到有些惊讶',但这并不是普遍支持的,但这不是一个问题:很少有任何需要在HTML中转义Ascii撇号(仅在属性值中需要转义,并且仅当您使用Ascii撇号作为其分隔符),当有,你可以使用'引用.