html 中的空格%3c br%3e,document.write用unescape加载javascript的好处
我发现不少加载Javascript的代码都使用了unescape这个方法,我有点不解,为什么要加呢?我不加的话发现也照样加载成功且运行正常呀。例如google分析的代码就使用了unescape这个方法:var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");document
我发现不少加载Javascript的代码都使用了unescape这个方法,我有点不解,为什么要加呢?我不加的话发现也照样加载成功且运行正常呀。
例如google分析的代码就使用了unescape这个方法:
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
try {
var pageTracker = _gat._getTracker("UA-XXXXX");
pageTracker._trackPageview();
} catch(err) {}
这行的好处是什么:
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
对比这行:
document.write("
通过查阅相关资料,发现原来这样写的好处是:这意味着代码可在缺少 CDATA 的 XML / XHTML 和 HTML 中运行。
关于 XML CDATA
所有 XML 文档中的文本均会被解析器解析。
只有 CDATA 区段(CDATA section)中的文本会被解析器忽略。
PCDATA
PCDATA 指的是被解析的字符数据(Parsed Character Data)。
XML 解析器通常会解析 XML 文档中所有的文本。
当某个 XML 元素被解析时,其标签之间的文本也会被解析:
此文本也会被解析
解析器之所以这么做是因为 XML 元素可包含其他元素,就像这个例子中,其中的 元素包含着另外的两个元素(first 和 last):
BillGates
而解析器会把它分解为像这样的子元素:
Bill
Gates
CDATA
术语 CDATA 指的是不应由 XML 解析器进行解析的文本数据(Unparsed Character Data)。
在 XML 元素中,"<" 和 "&" 是非法的。
"<" 会产生错误,因为解析器会把该字符解释为新元素的开始。
"&" 也会产生错误,因为解析器会把该字符解释为字符实体的开始。
某些文本,比如 JavaScript 代码,包含大量 "<" 或 "&" 字符。为了避免错误,可以将脚本代码定义为 CDATA。
CDATA 部分中的所有内容都会被解析器忽略。
CDATA 部分由 "" 开始,由 "" 结束:
</p><p>function matchwo(a,b)</p><p>{</p><p>if (a < b && a < 0) then</p><p>{</p><p>return 1;</p><p>}</p><p>else</p><p>{</p><p>return 0;</p><p>}</p><p>}</p><p>
在上面的例子中,解析器会忽略 CDATA 部分中的所有内容。
关于 CDATA 部分的注释:
CDATA 部分不能包含字符串 "]]>"。也不允许嵌套的 CDATA 部分。
标记 CDATA 部分结尾的 "]]>" 不能包含空格或折行。
转义字符
非法的 XML 字符必须被替换为实体引用(entity reference)。
假如您在 XML 文档中放置了一个类似 "
if salary < 1000 then
为了避免此类错误,需要把字符 "
if salary < 1000 then
在 XML 中有 5 个预定义的实体引用:
< < 小于
> > 大于
& & 和号
' ' 单引号
" " 双引号
注释:严格地讲,在 XML 中仅有字符 "
JavaScript unescape() 函数
定义和用法
unescape() 函数可对通过 escape() 编码的字符串进行解码。
语法
unescape(string)参数 描述
string 必需。要解码或反转义的字符串。
返回值
string 被解码后的一个副本。
说明
该函数的工作原理是这样的:通过找到形式为 %xx 和 %uxxxx 的字符序列(x 表示十六进制的数字),用 Unicode 字符 \u00xx 和 \uxxxx 替换这样的字符序列进行解码。
提示和注释
注释:ECMAScript v3 已从标准中删除了 unescape() 函数,并反对使用它,因此应该用 decodeURI() 和 decodeURIComponent() 取而代之。
实例
在本例中,我们将使用 escape() 来编码字符串,然后使用 unescape() 对其解码:
var test1="Visit W3School!"
test1=escape(test1)
document.write (test1 + "
")
test1=unescape(test1)
document.write(test1 + "
")
输出:
Visit%20W3School%21
Visit W3School!
您可能对以下文章也感兴趣
更多推荐
所有评论(0)