どこかでXHTMLは原則としてUTF-8で書くものだという文書か何かを読んだことがあり、僕は基本UTF-8で書くようにしています。
ただ、それがFirefoxユーザー向けならいいのでしょうが、どうもIE6ユーザーはたまにページを開いても、真っ白になってしまうようです。(ブラウザの文字コードを自動認識にすれば、表示される)
そのため、最近はUTF-8で書くのもためらいがちです。そこで、皆様にお伺いします。
①そもそも、XHTMLは原則としてUTF-8で書くものなのか?
②IE6対応のことを考えると、SHIFT-JISやEUC-JPのほうがよいのか?
③この問題に、ほかの解決策はあるのか?(ユーザーにFirefoxを勧めるとか、毎回IE6で文字コードを変えてもらう、というのはなしです)
以上、よろしくお願いいたします。
①そんなことはありません。
HTML と同様に様々な文字コードが使用可能です。
ただし、XHTML の基礎となっている XML では、UTF-8 か UTF-16 の場合のみ最初の XML 宣言 (<?xml version="1.0" encoding="UTF-8"?>) を省略できるのですが、UTF-8 以外の文字コードを使う場合は XML 宣言を省略できません。(<?xml version="1.0" encoding="Shift_JIS"?> 等が必要)
しかし、この XML 宣言を書くと、
・Mac 版 IE 4.5 では HTML として解釈されずソースが表示されてしまう
・IE6 では標準モードではなく互換モードで表示されてしまう
といった不具合があり、これもいまいちですので、「XHTML では原則として UTF-8」というのもあながち間違いとは言えません。
②そのようなことはありません。
③実際のページを見てみないとなんともいえませんが、一般論としてお答えします。
まず一番良いのは、サーバ側で適切な HTTP ヘッダ (Content-Type: text/html; charset=UTF-8) をつけて送信することです。
が、通常は META タグの HTTP-EQUIV 属性できちんと UTF-8 であることを宣言すること (<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />) で十分です。(そのページの中で最初に使われる日本語文字列より先に書いておく必要があります)
ただし、META タグよりも HTTP ヘッダの方が優先されるので、サーバの設定が誤っていると、適切な META タグをつけていても文字化けする可能性があります。
サーバがどのような HTTP ヘッダをつけて送ってきているかは、Firefox の LiveHTTPHeaders 拡張を使うと簡単に確認できます。
> なぜIE6だけがこんなことになるのか
おそらく何かが誤っていて、Firefox や Opera では「たまたま」期待したとおりに表示できているだけなのだろうと思います。
実際に症状が起きているページの URL を教えていただければ有益なアドバイスができると思うのですが、それが難しければ、Another HTML-lint でチェックをかけると、解決のためのヒントが得られる可能性が高いと思います。
参考: 正しいHTMLのための若干の知識 - XML宣言と文字コード情報
ところで、そもそも XHTML である必然性はあるのでしょうか?
XHTML でなければできない何かの目的があるのならいいですが、そうでなければ HTML 4.01 を使っておくのが無難です。
1.特にそのような決まりはありません。
ただ、XHTML のベースとなる XML では対応するアプリケーションは最低限「UTF-8」と「UTF-16」をサポートするように定められている為、UTF-8 で書いておいたほうが文字コードをサポートしていない可能性を減らせます。
http://www.atmarkit.co.jp/fxml/rensai/xmlwomanabou06/learning-xm...
2.3.は同一の方法で解決できるはずです。
そもそも Web ページで使用される文字コードは HTTP ヘッダーなどで提供するのがベストです。
これは場合によってはサーバーの設定を必要とするので代替手段として XHTML 中の meta タグにて指定する場合もあります。
http://www.mozilla.gr.jp/standards/webtips0022.html
また、これは理想論ではあるので各ブラウザが出来るだけ正確に判別できるように対策する事は可能です。
なるほど!
mozillaのサイトの「文字コード宣言より手前に日本語を書かない」に引っ掛かるのかもしれません。いつも、先にtitleを書いていたもので。
ありがとうございます。
文字コードをMETAタグのcontent要素で指定すれば自動エンコードで大丈夫だと思っているのですが、いかがでしょうか?
ただ、私の場合はHTML4.01ではありますが以下の理由でEUC-JPで書いております。
・VineLinuxの標準文字コードがEUC-JPだから
・PHPはEUCで書いたほうがよいと聞いたから統一している
・仕事でもEUCでコーディングしている
などです
ちなみに、W3Cの勧告では特に表記はありませんが、XHTMLの例ではUTF-8を使っていました。
また、文字コードの指定ではEUCを使用していました。
meta自体はちゃんと指定しているはずなのです。
たぶん、上の方が紹介してくれたサイトの問題なのかもしれませんが、もし無理だったら、EUC-JPも検討せざるを得ないですね。(一度、EUC-JPで作ったサイトはうまくいっているみたいです)
あと、皆様にお伺いしたいのは、なぜIE6だけがこんなことになるのか、という点です。OperaやFirefoxではこういった問題は起こらなかったので。
meta 要素がダメならサーバーで設定するか、
.htaccess に
AddDefaultCharset utf-8
を書いてみるとか。
> なぜIE6だけがこんなことになるのか
XHTML なら XML宣言で
<?xml version="1.0" encoding="UTF-8"?>
のようにエンコード指定してあれば FireFox や Opera はそれに従うはずです。
XML宣言はちょっとIE6のCSSのことを対処するとなると、しんどいので、あまり考えたくはないです。
ありがとうございます。
①そんなことはありません。
HTML と同様に様々な文字コードが使用可能です。
ただし、XHTML の基礎となっている XML では、UTF-8 か UTF-16 の場合のみ最初の XML 宣言 (<?xml version="1.0" encoding="UTF-8"?>) を省略できるのですが、UTF-8 以外の文字コードを使う場合は XML 宣言を省略できません。(<?xml version="1.0" encoding="Shift_JIS"?> 等が必要)
しかし、この XML 宣言を書くと、
・Mac 版 IE 4.5 では HTML として解釈されずソースが表示されてしまう
・IE6 では標準モードではなく互換モードで表示されてしまう
といった不具合があり、これもいまいちですので、「XHTML では原則として UTF-8」というのもあながち間違いとは言えません。
②そのようなことはありません。
③実際のページを見てみないとなんともいえませんが、一般論としてお答えします。
まず一番良いのは、サーバ側で適切な HTTP ヘッダ (Content-Type: text/html; charset=UTF-8) をつけて送信することです。
が、通常は META タグの HTTP-EQUIV 属性できちんと UTF-8 であることを宣言すること (<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />) で十分です。(そのページの中で最初に使われる日本語文字列より先に書いておく必要があります)
ただし、META タグよりも HTTP ヘッダの方が優先されるので、サーバの設定が誤っていると、適切な META タグをつけていても文字化けする可能性があります。
サーバがどのような HTTP ヘッダをつけて送ってきているかは、Firefox の LiveHTTPHeaders 拡張を使うと簡単に確認できます。
> なぜIE6だけがこんなことになるのか
おそらく何かが誤っていて、Firefox や Opera では「たまたま」期待したとおりに表示できているだけなのだろうと思います。
実際に症状が起きているページの URL を教えていただければ有益なアドバイスができると思うのですが、それが難しければ、Another HTML-lint でチェックをかけると、解決のためのヒントが得られる可能性が高いと思います。
参考: 正しいHTMLのための若干の知識 - XML宣言と文字コード情報
ところで、そもそも XHTML である必然性はあるのでしょうか?
XHTML でなければできない何かの目的があるのならいいですが、そうでなければ HTML 4.01 を使っておくのが無難です。
上記参考アドレスを読み、かつAnother HTML-lintもやってみました。間違いなく、titleの後ろで文字コードを指定しているでした。
皆さん、ありがとうございます。
上記参考アドレスを読み、かつAnother HTML-lintもやってみました。間違いなく、titleの後ろで文字コードを指定しているでした。
皆さん、ありがとうございます。