文字化け

[新着] Webテンプレートを仮オープンしました



0   名前: ai : 2004/10/11 10:46   [URL
http://maebashi.cool.ne.jp/underw/test2.html
リンクに飛んだ後に戻ると文字化けをしてしまうのですが
どうすれば文字化けしないようにできるのですか?

1   名前: h_naruaki : 2004/10/11 17:46
おそらく文字コードがないからだと思いますが、が!!!
<HTML>はあるにしろ、<BODY>がありませんよ?ちゃんとこのサイトの説明読んでからにしてくださいね。

2   名前: カヅサツ : 2004/10/11 18:24   [URL
> おそらく文字コードがないからだと思いますが、が!!!

ええと、「文字コード(文字符号化方式)の宣言がない」の誤りだと思いますが、あるみたいです。が、後述の理由により反映されない可能性があります。

> <BODY>がありませんよ?

body要素の開始・終了タグは省略可能です。

揚げ足ではなく、この問題と関わってくるであろう仕様です。

http://maebashi.cool.ne.jp/underw/test2.html のソースを見てみましょう。

> <DIV align="center">
> (略)
> </DIV>
> <!-- cool -->
> <HTML>
> <HEAD>
> <META HTTP-EQUIV="Content-Type" CONTENT="text/html; CHARSET=EUC-JP">
> <TITLE>音楽 交流 〜響〜</TITLE>

いきなり div要素が出現しますが、HTMLの仕様は以下のようになっています。

・div要素は body要素の内容にしかなれない
・body要素の開始・終了タグは省略可能
・head要素も開始・終了タグは省略可能
・html要素も開始・終了タグは省略可能
・body要素はhead要素の直後にしか置けない

つまり、div要素が始まった時点で body要素が始まったとみなされ、ついでにその前で head要素が終了していると見なされます。
で、

> <META HTTP-EQUIV="Content-Type" CONTENT="text/html; CHARSET=EUC-JP">
> <TITLE>音楽 交流 〜響〜</TITLE>

このあたりの head要素内にしか置けない要素がどうなるかというと、解釈しない、とするブラウザがあるかもしれません。

もちろん、理論上そうなる(なりうる)というだけのハナシですので、原因は他にあるかもしれません。

> リンクに飛んだ後に戻ると文字化けをしてしまうのですが

オレの環境(Windows版 IE 6.01 および Opera 7.53)では再現しませんでした。

3   名前: h_naruaki : 2004/10/11 18:43
あ、本当だ。文字コードありますね。失礼しました。

でも、<BODY>や<HTML>って省略していいんですか?
HTMLチェックでも<HTML>いれろ!って言われましたけど・・・
個人的には入れた方がいろいろなブラウザでの再現性は良いと思います。

では。


4   名前: カヅサツ : 2004/10/11 22:14   [URL
> でも、<BODY>や<HTML>って省略していいんですか?

良いのです。以下は Valid な HTML 4.01 文書です。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<title>オレのページ</title>
<p>こんにちは</p>

HTML文書において必須なのは、文書型宣言と title要素だけです。

> HTMLチェックでも<HTML>いれろ!って言われましたけど・・・

入れた方が無難なことは多いです。例えば、主に日本語で書かれたドキュメントの、各要素に lang属性を付けるのは馬鹿らしいですね。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<title lang="ja">オレのページ</title>
<p lang="ja">こんにちは</p>


そこで html要素に指定すれば、一気に楽になります。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html lang="ja">
<title>オレのページ</title>
<p>こんにちは</p>

> いろいろなブラウザでの再現性は良いと思います。

それは悪いにはブラウザであって、HTML文書ではありません。
もちろん、省略すべきとは言いませんが、文字化けするというハナシは聞きません。

ちなみに、XHTML および ISO-HTML では、タグの省略はできません(XHTMLでは空要素でも終了タグが必須あるいは、特殊な省略のみ認められます)。

5   名前: カヅサツ : 2004/10/11 22:16   [URL
ちなみに、p要素や li要素の終了タグも省略できるのは有名ですね。

まあ初心者は「省略しない」のが無難ですが。

6   名前: Sinryow : 2004/10/12 01:26   [URL
まあ,<meta>で文字コードを指定しておくのが無難ですね。
http://www.tagindex.com/html_tag/page/meta_01.html

ちなみに,>>2でカヅサツさんが指摘している
> <DIV align="center">
> (略)
> </DIV>
> <!-- cool -->
> <HTML>
> <HEAD>
> <META HTTP-EQUIV="Content-Type" CONTENT="text/html; CHARSET=EUC-JP">

は,広告なので変更しようがないですよ。

7   名前: DOCTYPE! : 2004/10/12 03:53
> は,広告なので変更しようがないですよ。

広告ですが、対処法はあります。

COOL ONLINEの広告ソースは、
body要素の開始タグの直後に付加されるようです。

body要素の開始タグを省略しなければ、img要素のalt属性がなかったり、
URI属性値中の"&"が"&amp;"になっていなかったりといった間違いは
あるものの、広告をbody要素の内容にすることは可能だと思われます。

参考:http://maebashi.cool.ne.jp/stallions/

広告付加プログラムに、ブラウザ並のHTMLを解釈する力はありませんから、
制作者が配慮していく必要がありそうです。
(ソース自体の間違いはどうにもなりませんが)

8   名前: h_naruaki : 2004/10/12 17:00
ですね。DOCTYPE!さんのおっしゃる通り、広告をサーバーが付けるときに<body>で判断しているみたいですから。
HTMLの仕様では付けなくても良いみたいですが、サーバーとかはそういうので判断している場合が多いですから、付けた方が良いと思います。

どのみち<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">などは付けた方が良いと思いますけど・・・

では。

一覧へ戻る