我发现不少加载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!

您可能对以下文章也感兴趣

html 中的空格%3c br%3e,document.write用unescape加载javascript的好处相关推荐

  1. html 中的空格%3c br%3e,URL编码表一览 - frabbit的个人空间 - OSCHINA - 中文开源技术交流社区...

    æ 退格 TAB 换行 回车 空格 ! " # $ % & ' ( ) * + , - . / %00 %01 %02 %03 %04 %05 %06 %07 %08 %09 %0a ...

  2. 在NVIDIA A100 GPU中使用DALI和新的硬件JPEG解码器快速加载数据

    在NVIDIA A100 GPU中使用DALI和新的硬件JPEG解码器快速加载数据 如今,最流行的拍照设备智能手机可以捕获高达4K UHD的图像(3840×2160图像),原始数据超过25 MB.即使 ...

  3. 如何在App中实现朋友圈功能之六快速实现下拉加载朋友圈功能——箭扣科技Arrownock

    如何在App中实现朋友圈功能 之六 快速实现下拉加载朋友圈功能 实现逻辑: 根据上次下拉刷新的时间从数据库加载出limit(比如10)条post,判断总数据条数: a. 如果总数据大于limit条,清 ...

  4. Java中的类加载器(ClassLoader)及类的加载机制

    类加载器就是用来将class文件加载到内存中的一个java类! 系统默认有三个类加载器! ①BootStrap:这不是java类,是java虚拟机在启动的时候加载的第一个类,这个加载器用来加载核心类, ...

  5. js中load载入html页面,使用jquery的load方法加载html页面,但是html引入的js不生效

    Write By Monkeyfly 以下内容均为原创,如需转载请注明出处. 前提 有一个公共的登录弹框页面需要在多个页面引用,百度后就使用了jQuery 的 load 方法. 做法: 将公共的 ht ...

  6. h5中performance.timing轻松获取网页各个数据 如dom加载时间 渲染时长 加载完触发时间...

    在控制台中输入window.performance.timing(html5的属性); 各字段的含义: · navigationStart:当前浏览器窗口的前一个网页关闭,发生unload事件时的Un ...

  7. 错误 找不到或无法加载主类mysql_解决Eclipse中“诡异”的错误:找不到或无法加载主类...

    记录下来遇到的(问题,解决方法),是更有效的解决问题的方式.(原谅我领悟的太晚与懒,从此用更有意义的方法,做一个更有意义的人) 因为遇到了多次,参考同一个方法,原文连接:https://blog.cs ...

  8. 在SQL Server 2005 Express 中添加报表服务后 (Business Intelligence Development Studio) vs2005 加载程序集问题解决办法...

         前些日子在安装报表工具是出现了程序集加载不上的问题于是法帖子求助csdn论坛,但是很长时间了,最后还是自己恢复了自己,问题解决了,把它放上来看有没有朋友出现相同的问题,供参考. 发表于:20 ...

  9. 使用 document.onreadystatechange()来判断页面加载完

    document.onreadystatechange = subSomething;//当页面加载状态改变的时候执行这个方法. function subSomething() {  if(docum ...

最新文章

  1. 以前5年只专注于.net,现今开始学习java.
  2. TCP和UDP的最完整的区别
  3. Java核心技术点之动态代理
  4. python语言的变量随时_Python参数注解
  5. PHP的统一换行PHP_EOL
  6. java 开发详解_面向接口编程详解-Java篇
  7. 什么?你项目还在用Date表示时间?!
  8. Ubuntu crontab 定时 python 详细
  9. Mr.J-- jQuery学习笔记(十一)--事件委托
  10. jmeter持续时间循环控制器_不写代码实现条件循环?只用Jmeter就能实现
  11. Mongoose的链接和model优化
  12. 菜鸟的MySQL学习笔记(一)
  13. U-Mail邮件服务器教你反垃圾邮件新方法
  14. 修改Azure Website默认时区
  15. ASP.NET与JS交互
  16. MSN Messenger协议
  17. 体检导检系统服务器系统,全科智能导检系统
  18. 传奇服务器端地图链接在哪个文件夹,传奇客户端有新地图,怎样在服务端设置链接?让玩家进去?...
  19. MVP简单使用+RecyclerView
  20. vue中使用rrweb实现页面回放功能

热门文章

  1. 回归初始互联网手机核心档位初心 荣耀Play性能真旗舰再出发
  2. Cadence Allegro 导出Dangling Line, Via and Antenna Report报告详解
  3. 计算机启动安全模式启动不了怎么办,电脑无法进入安全模式怎么办?详细教您解决方法...
  4. 智能投影的2014:今年它是一碗“杂碎汤”,明年我们期待黑科技
  5. 利用msf控制目标电脑
  6. 《实用机器学习》(孙亮 黄倩.著)笔记——第七章 推荐算法基础
  7. USB暂停与蓝牙鼠标断开
  8. 【Spring Security】如何实现多设备同一时间只允许一个账号登录(即前登录用户被后登录用户挤下线)?只需简单两步!
  9. (转贴)彻底卸载hp打印机驱动
  10. 基于HMM的语音识别(一)