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

贊助商

分類目錄

贊助商

最新文章

搜索

document.write用unescape加載javascript的好處

作者:admin    時間:2018-4-6 10:3:0    瀏覽:

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

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

<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>");

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

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

關于 XML CDATA

所有 XML 文檔中的文本均會被解析器解析。

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

PCDATA

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

XML 解析器通常會解析 XML 文檔中所有的文本。

當某個 XML 元素被解析時,其標簽之間的文本也會被解析:

<message>此文本也會被解析</message>

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

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

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

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

CDATA

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

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

"<" 會產(chǎn)生錯誤,因為解析器會把該字符解釋為新元素的開始。

"&" 也會產(chǎn)生錯誤,因為解析器會把該字符解釋為字符實體的開始。

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

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

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

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

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

關于 CDATA 部分的注釋:

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

標記 CDATA 部分結尾的 "]]>" 不能包含空格或折行。

轉義字符

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

假如您在 XML 文檔中放置了一個類似 "<" 字符,那么這個文檔會產(chǎn)生一個錯誤,這是因為解析器會把它解釋為新元素的開始。因此你不能這樣寫:

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

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

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

在 XML 中有 5 個預定義的實體引用:

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

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

導讀:JS轉義字符匯總 斜杠“/”無需轉義

JavaScript unescape() 函數(shù)

定義和用法

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

語法

unescape(string)

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

返回值

string 被解碼后的一個副本。

說明

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

提示和注釋

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

實例

在本例中,我們將使用 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!

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

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