作者 主題: 這算是 firefox 的問題還是這樣的 html 寫法是不標準的?  (閱讀 6852 次)

0 會員 與 1 訪客 正在閱讀本文。

twu2

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 5394
  • 性別: 男
    • 檢視個人資料
    • http://blog.teatime.com.tw/1
代碼: [選擇]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh-TW" lang="zh-TW" dir="ltr">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta http-equiv="Content-Language" content="zh-TW" />
<title>test for Firefox</title>
</head>
<body>
<p>test</p>
<!--
 <abc x="123 --456 789"></abc>
-->
<p>test for -- in firefox</p>
</body>
</html>


上頭的 code, 因為有 -- 在註解裡頭.

在 IE 看是這樣子:
代碼: [選擇]
test
test for -- in firefox

在 Firefox 1.5, 2.0 下頭, 變成:
代碼: [選擇]
test
-->

test for -- in firefox


那一個才算是符合 html 的規範? IE 還是 firefox?

asako

  • 活潑的大學生
  • ***
  • 文章數: 242
    • 檢視個人資料
我覺得是 firefox 對,因為註解應是 <!-- xxxxx -->
而不是 <!-- xxxx //-->

twu2

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 5394
  • 性別: 男
    • 檢視個人資料
    • http://blog.teatime.com.tw/1
你可以把 // 移除, 情形還是一樣. 只是多出來那一段變成 -->

在 --> 前加上 // 是不允許的嗎? 我怎麼記得這樣寫比較好? (忘了在那兒學的, 記不起來了)
我把前面那個移除掉. 並不會有影響.

twu2

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 5394
  • 性別: 男
    • 檢視個人資料
    • http://blog.teatime.com.tw/1
代碼: [選擇]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


剛剛又測了一下, 把這個拿掉就會得到和 ie 一樣的畫面.

Yamaka

  • 俺是博士!
  • *****
  • 文章數: 4913
    • 檢視個人資料
    • http://www.ecmagic.com
引述: "asako"
我覺得是 firefox 對,因為註解應是 <!-- xxxxx -->
而不是 <!-- xxxx //-->


如果是這樣的話,
那應該說兩個都錯了~~~

<!--  != <!--  -->


引述: "twu2"
在 --> 前加上 // 是不允許的嗎? 我怎麼記得這樣寫比較好? (忘了在那兒學的, 記不起來了)
我把前面那個移除掉. 並不會有影響.


// 應該是用在寫 javascript 的時候用吧~~

asako

  • 活潑的大學生
  • ***
  • 文章數: 242
    • 檢視個人資料
從這裡轉貼來的
http://www.htmlhelp.org/reference/wilbur/misc/comment.html


Since HTML is officially an SGML application, the comment syntax used in HTML documents is actually the SGML comment syntax. Unfortunately this syntax is a bit unclear at first.

The definition of an SGML comment is basically as follows:

A comment declaration starts with <!, followed by zero or more comments, followed by >. A comment starts and ends with "--", and does not contain any occurrence of "--".
This means that the following are all legal SGML comments:
<!-- Hello -->
<!-- Hello -- -- Hello-->
<!---->
<!------ Hello -->
<!>
Note that an "empty" comment tag, with just "--" characters, should always have a multiple of four "-" characters to be legal. (And yes, <!> is also a legal comment - it's the empty comment).
Not all HTML parsers get this right. For example, "<!------> hello-->" is a legal comment, as you can verify with the rule above. It is a comment tag with two comments; the first is empty and the second one contains "> hello". If you try it in a browser, you will find that the text is displayed on screen.

There are two possible reasons for this:

The browser sees the ">" character and thinks the comment ends there.
The browser sees the "-->" text and thinks the comment ends there.
There is also the problem with the "--" sequence. Some people have a habit of using things like "<!-------------->" as separators in their source. Unfortunately, in most cases, the number of "-" characters is not a multiple of four. This means that a browser who tries to get it right will actually get it wrong here and actually hide the rest of the document.
For this reason, use the following simple rule to compose valid and accepted comments:

An HTML comment begins with "<!--", ends with "-->" and does not contain "--" or ">" anywhere in the comment.

zzlong

  • 懷疑的國中生
  • **
  • 文章數: 48
    • 檢視個人資料
    • 香港 PHP 用家社區
引述: "twu2"
<!--
 <abc x="123 --456 789"></abc>
-->

這樣的注解恐怕是違反標準的,因為官方的 HTML 4.01 文件說:
引述: "HTML 4.01"
Authors should avoid putting two or more adjacent hyphens inside comments.

(http://www.w3.org/TR/html4/intro/sgmltut.html#h-3.2.4)

官方的 XML 1.0 文件也對註解中包含 -- 也明令禁止:
引述: "XML 1.0"
......the string "--" (double-hyphen) MUST NOT occur within comments.

(http://www.w3.org/TR/2004/REC-xml-20040204/#sec-comments)

既然語法出錯,不論瀏覽器顯示什麼也不能責怪它了。

twu2

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 5394
  • 性別: 男
    • 檢視個人資料
    • http://blog.teatime.com.tw/1
看起來應該不算是 firefox 的 bug, 如果是不能在註解中出現 --, 那麼我這兒出現的這個情形, 應該算是 lifetype 的 bug 吧.

LifeType 的 postTrackbackLink() 在輸出資料於註解的時候, 也會把文章標題列在其中, 所以, 我們只要想辦法在這個輸出的地方, 把文章標題有出現 - 的, 都改成 \-, 來避免這個問題. (PS. 會不會造成這個運作有問題呢? 我想應該不會吧, 頂多看到的 topic 不太正確, 並不會影響 trackback 的 link, 而且 \- 在  browser 上頭, 看到的應該也是 - 吧.)

這個 patch 可以由這兒抓取: http://www.teatime.com.tw/~tommy/mypatch/lifetype_postTrackbackLink_topic.patch

代碼: [選擇]
diff -Nur class.orig/net/customrequestgenerator.class.php class/net/customrequestgenerator.class.php
--- class.orig/net/customrequestgenerator.class.php 2006-06-16 08:25:45.680792558 +0800
+++ class/net/customrequestgenerator.class.php 2006-06-16 08:36:23.160057155 +0800
@@ -283,11 +283,13 @@
                                    xmlns:dc="http://purl.org/dc/elements/1.1/"
                                    xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">';
 
-            $trackbackLink = $this->getTrackbackUrl()."?id=".$post->getId();
+            $trackbackLink = str_replace('-', '%2D', $this->getTrackbackUrl()."?id=".$post->getId());
+    $postLink = str_replace('-', '%2D', $this->postLink($post));
+    $topic = str_replace('-', '\-', $post->getTopic());
             $rdfBody = "<rdf:Description
-                             rdf:about=\"".$this->postLink($post)."\"
-                             dc:identifier=\"".$this->postLink($post)."\"
-                             dc:title=\"".$post->getTopic()."\"
+                             rdf:about=\"".$postLink."\"
+                             dc:identifier=\"".$postLink."\"
+                             dc:title=\"".$topic."\"
                              trackback:ping=\"".$trackbackLink."\"/>";
             $rdfFooter = "</rdf:RDF>";
 
diff -Nur class.orig/net/modrewriterequestgenerator.class.php class/net/modrewriterequestgenerator.class.php
--- class.orig/net/modrewriterequestgenerator.class.php 2006-06-16 08:26:08.656621134 +0800
+++ class/net/modrewriterequestgenerator.class.php 2006-06-16 08:36:55.351819113 +0800
@@ -224,12 +224,13 @@
                                    xmlns:dc="http://purl.org/dc/elements/1.1/"
                                    xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">';
 
-            $trackbackLink = $this->getTrackbackUrl()."?id=".$post->getId();
-
+            $trackbackLink = str_replace('-', '%2D', $this->getTrackbackUrl()."?id=".$post->getId());
+            $postLink = str_replace('-', '%2D', $this->postLink($post));
+            $topic = str_replace('-', '\-', $post->getTopic());
             $rdfBody = "<rdf:Description
-                             rdf:about=\"".$this->postLink($post)."\"
-                             dc:identifier=\"".$this->postLink($post)."\"
-                             dc:title=\"".$post->getTopic()."\"
+                             rdf:about=\"".$postLink."\"
+                             dc:identifier=\"".$postLink."\"
+                             dc:title=\"".$topic."\"
                              trackback:ping=\"".$trackbackLink."\"/>";
             $rdfFooter = "</rdf:RDF>";
 
diff -Nur class.orig/net/prettyrequestgenerator.class.php class/net/prettyrequestgenerator.class.php
--- class.orig/net/prettyrequestgenerator.class.php 2006-06-16 08:26:18.596546991 +0800
+++ class/net/prettyrequestgenerator.class.php 2006-06-16 08:37:11.207701904 +0800
@@ -245,11 +245,13 @@
                                    xmlns:dc="http://purl.org/dc/elements/1.1/"
                                    xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">';
 
-            $trackbackLink = $this->getTrackbackUrl()."?id=".$post->getId();
+            $trackbackLink = str_replace('-', '%2D', $this->getTrackbackUrl()."?id=".$post->getId());
+            $postLink = str_replace('-', '%2D', $this->postLink($post));
+            $topic = str_replace('-', '\-', $post->getTopic());
             $rdfBody = "<rdf:Description
-                             rdf:about=\"".$this->postLink($post)."\"
-                             dc:identifier=\"".$this->postLink($post)."\"
-                             dc:title=\"".$post->getTopic()."\"
+                             rdf:about=\"".$postLink."\"
+                             dc:identifier=\"".$postLink."\"
+                             dc:title=\"".$topic."\"
                              trackback:ping=\"".$trackbackLink."\"/>";
             $rdfFooter = "</rdf:RDF>";
 
diff -Nur class.orig/net/rawrequestgenerator.class.php class/net/rawrequestgenerator.class.php
--- class.orig/net/rawrequestgenerator.class.php 2006-06-16 08:26:28.660471933 +0800
+++ class/net/rawrequestgenerator.class.php 2006-06-16 08:37:23.439611499 +0800
@@ -260,11 +260,13 @@
                                    xmlns:dc="http://purl.org/dc/elements/1.1/"
                                    xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">';
 
-            $trackbackLink = $this->getTrackbackUrl()."?id=".$post->getId();
+            $trackbackLink = str_replace('-', '%2D', $this->getTrackbackUrl()."?id=".$post->getId());
+            $postLink = str_replace('-', '%2D', $this->postLink($post));
+            $topic = str_replace('-', '\-', $post->getTopic());
             $rdfBody = "<rdf:Description
-                             rdf:about=\"".$this->postLink($post)."\"
-                             dc:identifier=\"".$this->postLink($post)."\"
-                             dc:title=\"".$post->getTopic()."\"
+                             rdf:about=\"".$postLink."\"
+                             dc:identifier=\"".$postLink."\"
+                             dc:title=\"".$topic."\"
                              trackback:ping=\"".$trackbackLink."\"/>";
             $rdfFooter = "</rdf:RDF>";
 


2006/6/16 修正:
1. str_replace() 參數順序寫錯. :-(
2. 如果有用自訂的 url, 則 url 也要把 '-' 改成 '%2D'