在html中有几个特殊的字符: < > ' " &
在处理javascript字符串内容的时候也有两个特殊的字符:‘ “
我们知道,在把内容用于html画面表示的时候,要表示的内容中要对以上的字符进行特殊的处理:即要进行字符创的转义。转义的方式如下表所示:
结果 | 描述 | 实体名称 | 实体编号 |
---|---|---|---|
" | quotation mark | " | " |
' | apostrophe | ' | ' |
& | ampersand | & | & |
< | less-than | < | < |
> | greater-than | > | > |
如果字符串中有”结果”列中对应的字符,则需要转成与“实体名称”列或“实体编号”列中对应的字符串,这样这些字符才能在画面中正常表示出来否则会显示异常。
在javascript中也有类似的问题,主要就是要对javascript字符串内容中的 ’ 和 “ 进行特殊的处理。举例如下所示:
// 错误的方式 alert("this is test "message"!"); alert('this is test 'message'!'); // 正确的方式 alert("this is test /"message/"!"); //或者 alert("this is test 'message'!"); alert('this is test /'message/'!');
我想对于简单的字符串组合方式(包含以上特殊字符串),上面的方式都比较容易掌握,但是对于由服务器端复杂地、组合地、嵌套地输出上面特殊的字符串的时候,可能会遇到麻烦。而且浏览器对于特殊字符串的解析存在差异,这是上述的转换得到的效果,我们就无法把握。例如下面的情况:
<script> function myClick(param){ alert(param); } // 调用1 myclick('1212'1212'); </script> <body> <!-- // 调用2 --> <input type="button" value="click me" οnclick="myclick('1212'1212')" /> </body>
上述两个地方调用同一个方法的时候,就存在差异,“调用1”可以成功,但是“调用2”就不能执行了,这就是浏览器对于相同的转义字符处理上的差异性。我们可以对内容 1212'1212 采用不同的转化处理,在html表示的时候可以转化为 1212'1212 ,用于javascript中的时候可以转化为'1212\'1212。这样处理问题是可以解决,但是如果是要把同一个java变量中的字符串用于html表示和javascript变量,上述的方式未免太麻烦了。
对于这个麻烦的问题,可以采用另外一种转化方式进行处理,就能避免浏览器对于html和javascript解析时的差异性。如下所示:
<script> function myClick(param){ alert(param); } // 调用1 myclick('1212/u00271212'); myclick("1212/u00221212"); </script> <body> <!-- // 调用2 --> <input type="button" value="click me" οnclick="myclick('1212/u00271212')" /> <input type="button" value="click me" οnclick='myclick("1212/u00221212")' /> </body>
常用的可以转化的字符:
字符说明 Unicode 转义序列
' /u0027
" /u0022
长破折号 (—) /u2014
注册符号 (R) /u00AE
版权符号 (c) /u00A9
商标符号 (?) /u2122
欧元符号 (€) /u20AC
反斜杠 (/) /u005C
正斜杠 (/) /u002F
左大括号 ({) /u007B
右大括号 (}) /u007D
小于号 (<) /u003C
大于号 (>) /u003E
星号 (*) /u002A