2009-11-14 47 views
0

首先,我瞭解它的方式,在XHTML文檔中使用數字實體比如"而不是"更合適,是嗎?適用於XHTML,XML和內聯內嵌JavaScript的實體類型

二,對於我的RSS XML feed,哪個實體類型是正確的?命名或數字?我相信這是數字,但在我的搜索中看到兩個例子。

第三,以下哪一項對於內聯JavaScript中的實體是正確的?

<span onmouseover="tooltip_on('<strong>Tooltip inside a span</strong> 
<br />Lorem ipsum dolor sit amet.<span>Lorem ipsum <code>dolor sit</code> 
amet, consectetur adipisicing elit.</span>');" 
onmouseout="tooltip_off();">tooltip inside a span</span> 

OR ...(在JS function內標籤被轉換爲命名實體):

<span onmouseover="tooltip_on('&lt;strong&gt;Tooltip inside a 
span&lt;/strong&gt;&lt;br /&gt;Lorem ipsum dolor sit amet. 
&lt;span&gt;Lorem ipsum &lt;code&gt;dolor sit&lt;/code&gt; 
amet, consectetur adipisicing elit.&lt;/span&gt;');" 
onmouseout="tooltip_off();">tooltip inside a span</span> 

編輯1:下面

偉大的答案,但也許我應該措辭我的問題不同。

忽視JavaScript的問題,這將用於您的網站和RSS:

(1)所有的數字實體,(2)所有命名實體,(3)兩者的混合物:&amp; &quot; &lt; &gt;,與休息是數字。

我傾向於3,因爲我的網站已經有&amp; &quot; &lt; &gt; &#039;深嵌,再加上htmlspecialchars()在不少地方使用。

編輯2:

下的所有好的答案,鄉親們。不幸的是不得不挑一個。

回答

0

首先,我的理解是,這是比較合適的XHTML文檔中使用的數字實體,如&#034;代替&quot;,是這樣嗎?

&quot; is also defined for XHTML.因此,您可以同時使用兩者。

二,對於我的RSS XML feed,哪種實體類型是正確的?命名或數字?我相信這是數字,但在我的搜索中看到兩個例子。

再次,&quot; is also defined for XML.所以你可以同時使用。

第三,以下哪一項適用於內嵌JavaScript的實體?因爲一個普通的<不是一個屬性值的聲明中允許的(但>是)

第二個是正確的。


編輯現在你提煉你的問題:

我會用一個包含我需要的所有字符的字符集。因此,如果您希望幾乎可以使用任何字符,請使用Unicode並使用UTF-8對字符進行編碼。

因此你可以編碼與UTF-8直接任意字符,並沒有必要使用字符引用比XML(至少&>"')的特殊字符的字符。

在這裏您可以在命名或數字字符引用之間自由選擇。更好地使用你喜歡的或你的編程語言使用/喜歡的東西。

+0

非常感謝Gumbo。如果沒有爲XML定義實體,例如' ',我應該使用數字實體作爲我的XML RSS提要嗎? – Jeff 2009-11-14 18:45:17

+0

@Jeff:是的,數字字符引用總是有效的。 – Gumbo 2009-11-14 19:04:41

+0

感謝您的編輯。我的服務器和代碼都使用UTF8。爲了清楚起見,你是否告訴我可以使用我的上述任何選項?具體3? – Jeff 2009-11-14 21:16:20

0

首先,我的理解是,這是 更適合使用數字 實體XHTML文檔中,如 "代替",是 嗎?

不完全是。

有兩個問題值得擔心。

這是純粹的舊XHTML還是將與HTML兼容的XHTML?

沒有&apos;是HTML,所以你不能在HTML兼容XHTML使用它(但你只需要在與分隔的屬性值來使用它」,所以只使用「代替。

這是怎麼回事用XML解析器未識別DTD處理?

如果是這樣,只有通用XML實體將被識別(QUOT,者,GT,LT,AMP)。

在另一方面,命名實體更具可讀性。真正的字符(例如v ia UTF-8)最具可讀性。

其次,我的RSS XML的飼料,其 實體類型是正確的?

使用quot,gt,lt,amp在需要的地方和其他地方的真實字符。

三,以下哪一項是 正確的內部實體 JavaScript?

更好地使用unobtrusive JS而不是內在事件屬性。

也就是說,規則與任何其他HTML屬性相同 - 只有&以及用於分隔屬性值的任何字符都需要用實體表示。

+0

謝謝大衛。所以對於Q1:我假設答案是「使用命名實體」。問題2:在Feed中使用數字實體是否有任何傷害?問題3:不明白答案。 – Jeff 2009-11-14 16:35:31

0
  • <&的屬性值,其中"是分隔符:使用&lt;,分別&amp;&quot;

這些都是在XML預定義的實體,以便將工作。與任何解析器無關,而不管它是否讀取文檔類型。它們也是HTML中正常定義的實體。

數字字符引用同樣有效,但稍微難以閱讀。

  • >文本內容:使用&gt;或保留爲-is。

>通常不需要逃避,這是在任何時候的屬性值完全合法的,而且它在文本內容合法的,只要它不形成]]>序列的一部分。 (這是XML規範中一個模糊,毫無意義,有時被忽略的部分)。無論如何,您可能總喜歡在文本內容中轉義它,只是爲了安全起見,而不必記住這條規則。 (這是Canonical XML的作用。)

數字字符引用同樣有效,但稍微難以閱讀。

  • '在屬性值,其中'是分隔符:使用&#39;

的數字字符引用是最正確的位置,因爲XML預定義的實體&apos;在技術上並不由HTML4標準(儘管它將在目前所有的瀏覽器工作)來定義。添加此實體的時間遲點反映了總是使用"作爲屬性值分隔符的常見做法。

  • 非ASCII字符:包括你正在使用和聲明UTF-8,你可以只吐人物直出的,是

只要。更小,更可讀的結果。

  • 非ASCII字符(不統一):使用數字字符引用

如果由於某種原因,你不能使用UTF-8(boooo !!!),使用像&#xE9;字符引用而不是HTML實體。無論如何,HTML實體只覆蓋Unicode字符集的一小部分;不妨將它們用於所有IMO。我個人更喜歡使用非ASCII字符的十六進制轉義字符&#x...,因爲通過它們的'U + xxxx'十六進制代碼來引用Unicode字符是傳統的。

儘管使用HTML實體在XHTML文檔中非常有效,但這意味着解析器必須提取外部實體(如DTD)才能確定實體是什麼。如果您堅持預定義的實體和字符引用,則可以使用輕量級非外部實體(包括XML解析器),而不會失去在文檔中查找文本包括實體引用的能力。

與RSS一樣,RSS的情況很模糊,所有不同的RSS版本都會潛伏着。 RSS 0.91有一個包含舊的HTML 3.2標準實體的DTD,但之前官方的DTD的SYSTEM URL已經走了。 (Netscape的所有者AOL在幾年前破壞了reorg中的鏈接,不僅如此,而且他們還會將你鏈接到他們的主頁,如果你試圖訪問它或任何其他地址原來的網站,因此提供了一個錯誤的HTML頁面,客戶期待一個DTD。壞的AOL,302-404s是如此虛假。)

RSS 2.0根本沒有官方的DTD。無論如何,避免使用HTML實體,首選使用預定義的實體和數字字符引用。

onmouseover="tooltip_on('<strong>Tool...

在任何文檔類型不可允許。 <在屬性值中無效。

onmouseover="tooltip_on('&lt;strong&gt;Tooltip...

有效,但無法讀取。我第二次David的Unobtrusive JavaScript建議。

+0

我不知道你是否會因爲這個答覆而出名),但我肯定會考慮一下我的JS的另一種方法。 JQuery「不顯眼」嗎? – Jeff 2009-11-14 19:44:24

+0

是的,我只得到了投票後,酒吧廢話胡言亂語,人們討厭長期涉及的答案。 ;-) jQuery(或任何其他框架)本質上並不是「不顯眼」,但它通常以這種方式使用它,使用選擇器選擇元素並將事件處理程序綁定到它們,而不是使用內聯HTML事件處理程序屬性。 – bobince 2009-11-14 20:20:57