技術(shù)頻道導(dǎo)航
HTML/CSS
.NET技術(shù)
IIS技術(shù)
PHP技術(shù)
Js/JQuery
Photoshop
Fireworks
服務(wù)器技術(shù)
操作系統(tǒng)
網(wǎng)站運(yùn)營

贊助商

分類目錄

贊助商

最新文章

搜索

document.write用unescape加載javascript的好處

作者:admin    時(shí)間:2018-4-6 10:3:0    瀏覽:

我發(fā)現(xiàn)不少加載Javascript的代碼都使用了unescape這個(gè)方法,我有點(diǎn)不解,為什么要加呢?我不加的話發(fā)現(xiàn)也照樣加載成功且運(yùn)行正常呀。

例如google分析的代碼就使用了unescape這個(gè)方法:

<script type="text/javascript">
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"));
</script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-XXXXX");
pageTracker._trackPageview();
} catch(err) {}</script>

這行的好處是什么:

document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));

對比這行:

document.write("<script src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'><\/script>");

通過查閱相關(guān)資料,發(fā)現(xiàn)原來這樣寫的好處是:

這意味著代碼可在缺少 CDATA 的 XML / XHTML 和 HTML 中運(yùn)行。

關(guān)于 XML CDATA

所有 XML 文檔中的文本均會(huì)被解析器解析。

只有 CDATA 區(qū)段(CDATA section)中的文本會(huì)被解析器忽略。

PCDATA

PCDATA 指的是被解析的字符數(shù)據(jù)(Parsed Character Data)。

XML 解析器通常會(huì)解析 XML 文檔中所有的文本。

當(dāng)某個(gè) XML 元素被解析時(shí),其標(biāo)簽之間的文本也會(huì)被解析:

<message>此文本也會(huì)被解析</message>

解析器之所以這么做是因?yàn)?XML 元素可包含其他元素,就像這個(gè)例子中,其中的 <name> 元素包含著另外的兩個(gè)元素(first 和 last):

<name><first>Bill</first><last>Gates</last></name>

而解析器會(huì)把它分解為像這樣的子元素:

<name>
  <first>Bill</first>
  <last>Gates</last>
</name>

CDATA

術(shù)語 CDATA 指的是不應(yīng)由 XML 解析器進(jìn)行解析的文本數(shù)據(jù)(Unparsed Character Data)。

在 XML 元素中,"<" 和 "&" 是非法的。

"<" 會(huì)產(chǎn)生錯(cuò)誤,因?yàn)榻馕銎鲿?huì)把該字符解釋為新元素的開始。

"&" 也會(huì)產(chǎn)生錯(cuò)誤,因?yàn)榻馕銎鲿?huì)把該字符解釋為字符實(shí)體的開始。

某些文本,比如 JavaScript 代碼,包含大量 "<" 或 "&" 字符。為了避免錯(cuò)誤,可以將腳本代碼定義為 CDATA。

CDATA 部分中的所有內(nèi)容都會(huì)被解析器忽略。

CDATA 部分由 "<![CDATA[" 開始,由 "]]>" 結(jié)束:

<script>
<![CDATA[
function matchwo(a,b)
{
  if (a < b && a < 0) then
  {
    return 1;
  }
  else
  {
    return 0;
  }
}
]]>
</script>

在上面的例子中,解析器會(huì)忽略 CDATA 部分中的所有內(nèi)容。

關(guān)于 CDATA 部分的注釋:

CDATA 部分不能包含字符串 "]]>"。也不允許嵌套的 CDATA 部分。

標(biāo)記 CDATA 部分結(jié)尾的 "]]>" 不能包含空格或折行。

轉(zhuǎn)義字符

非法的 XML 字符必須被替換為實(shí)體引用(entity reference)。

假如您在 XML 文檔中放置了一個(gè)類似 "<" 字符,那么這個(gè)文檔會(huì)產(chǎn)生一個(gè)錯(cuò)誤,這是因?yàn)榻馕銎鲿?huì)把它解釋為新元素的開始。因此你不能這樣寫:

<message>if salary < 1000 then</message>

為了避免此類錯(cuò)誤,需要把字符 "<" 替換為實(shí)體引用,就像這樣:

<message>if salary &lt; 1000 then</message>

在 XML 中有 5 個(gè)預(yù)定義的實(shí)體引用:

&lt; < 小于
&gt; > 大于
&amp; & 和號
&apos; ' 單引號
&quot; " 雙引號

注釋:嚴(yán)格地講,在 XML 中僅有字符 "<"和"&" 是非法的。單引號、雙引號和大于號是合法的,但是把它們替換為實(shí)體引用是個(gè)好的習(xí)慣。

導(dǎo)讀:JS轉(zhuǎn)義字符匯總 斜杠“/”無需轉(zhuǎn)義

JavaScript unescape() 函數(shù)

定義和用法

unescape() 函數(shù)可對通過 escape() 編碼的字符串進(jìn)行解碼。

語法

unescape(string)

參數(shù) 描述
string 必需。要解碼或反轉(zhuǎn)義的字符串。

返回值

string 被解碼后的一個(gè)副本。

說明

該函數(shù)的工作原理是這樣的:通過找到形式為 %xx%uxxxx 的字符序列(x 表示十六進(jìn)制的數(shù)字),用 Unicode 字符 \u00xx\uxxxx 替換這樣的字符序列進(jìn)行解碼。

提示和注釋

注釋:ECMAScript v3 已從標(biāo)準(zhǔn)中刪除了 unescape() 函數(shù),并反對使用它,因此應(yīng)該用 decodeURI()decodeURIComponent() 取而代之。

實(shí)例

在本例中,我們將使用 escape() 來編碼字符串,然后使用 unescape() 對其解碼:

<script type="text/javascript">

var test1="Visit W3School!"

test1=escape(test1)
document.write (test1 + "<br />")

test1=unescape(test1)
document.write(test1 + "<br />")

</script>

輸出:

Visit%20W3School%21
Visit W3School!

 您可能對以下文章也感興趣

標(biāo)簽: unescape  
相關(guān)文章
    x
    • 站長推薦
    /* 左側(cè)顯示文章內(nèi)容目錄 */