当前位置: 首页 > Web前端 > HTML5

HTML实体编码遇上js代码

时间:2023-04-04 23:15:18 HTML5

摘要:在js中,单引号和双引号都是字符串。如果我们要在字符串中使用单引号和双引号,我们需要用反斜杠对它们进行转义。而如果字符串出现在html标签中,我们需要做转义处理。单引号和双引号在js代码中。js中单双引号都是字符串。如果我们想在字符串中使用单引号和双引号,我们需要用反斜杠转义。如果我们在字符串中输出反斜杠,还是用反斜杠转义,即2个反斜杠输出1个反斜杠。在html代码中的html标签中,属性值通常用双引号括起来,也可以用单引号或者不用引号。这三种写法都是正确的,但通常我们选择使用双引号。如果我们要在属性值中使用单昵称和双昵称,我们不能只写下面这样这些都是错误的。和js中单双引号的转义一样,我们需要在属性中对单双引号进行转义,在html中输出保留符号。可以使用字符实体转义的形式。这里简单介绍一下:http://www.w3school.com.cn/ht....即如果要输出双引号,可以使用"的形式。另外,html也支持输出字符的十进制和十六进制编码形式,比如我们知道字符a的ascii码的十进制为97 十六进制为61,所以我们在页面正文中输出一个字符a,即有如下三种形式,同理,单引号和双引号也有十进制(单:39,双:34)和十六进制(单:27,双:22),因此我们在输出单引号时有两种选择属性,十进制和十六进制,输出双引号有三种选择。当js代码遇到实体编码时,我们可以通过dom节点提供的事件来编写调用js的代码,比如点击body来弹出字符串hello,我们可以写成好像需要弹出一个双引号吗?根据上面的规则,我们要这样写:当然alert中的单引号也可以用十进制或者十六进制编码也是可能以这种方式。是不是有点xss的感觉?如果我们将双引号的需要改为单引号呢?如果我们使用十进制或十六进制编码呢?这仍然是不可能的。我们需要对js字符字符串中的单引号进行转义。比如前面的onclick="alert(''')"看起来很正常,但是后面的onclick="alert('"')"就有点不直观了。因为后者看起来像是反斜杠在转义&字符,而&不需要在js字符串中转义。动态输出弹出的消息,如上述警报。如果是变量控制,动态输出呢?那么我们就要注意这个msg字符串了。从这个例子来看,这个动态消息出现在属性onclick中,也出现在alert单引号开头的字符串中。我们需要将msg中的双引号转成"or"或",并在msg中的单引号前加一个反斜杠 ?题外话:msg中的反斜杠需要进行二次处理,因为反斜杠在msg中并不特殊html属性,但是在js字符串中比较特殊,所以正确的做法是在每个反斜杠和单引号前加一个反斜杠,但是不能保证属性使用双引号,而in中的字符串使用单引号alert,因为可以这样写?这种情况下,我们需要把msg中的单引号转成'or',在msg中的双引号前加一个反义词Slash\off-topic:同上好像根据不同的情况做不同的处理,其实我们不一定只需要在单双引号前面加一个反斜杠,然后对单双引号实体进行编码,在js中,如果反斜杠后面是不需要用反斜杠转义的字符,反斜杠被丢弃,所以在单引号前加反斜杠也没关系。自动处理和识别提醒在magix项目中,由于magix-combine的支持,可以识别属性中的部分js代码,并自动处理。例如,变量名可以包含任何单引号、双引号和反斜杠。工具自动识别和处理,开发者无需做任何事情。而对于这种写法:第一种写法其实是不正确的,但是第二种情况看起来很奇怪。magix-combine工具可以识别是否需要加反斜杠,并自动加处理。第一种需要加反斜杠,工具会自动加,并提醒开发者这里的写法不正确。第二种表示开发者已经意识到问题并自行处理,工具不再处理。不再提醒开发人员。本文作者:队列阅读原文为云栖社区原创内容,未经允许不得转载。