過去ログ表示


過去ログ 269 を表示

トピック内全 7 記事中の 1 〜 7 番目を表示
[ 最新記事及び返信フォームをトピックトップへ ]
このトピックの全ページ / [0]

content-typeに複数のcharset
(#42106) このトピック中1番目の投稿
(環境: WinXP SP2/Other)

http://www.oracle.co.jp/ofc_owa/deliv/mdsp?p=317F721557652E9B
のhttpヘッダのcontent-typeに複数のcharsetが付いています。
Content-Type: text/html; charset=iso-2022-jp; charset=SHIFT_JIS
このためfirefox3 rc1では文字化けします。IE7では文字化けしません。
firefoxはcontent-type:の最後のcharset=SHIFT_JISを採用し、IEはiso-2022-jpと判断しているようです。html自体はiso-2022-jpで書かれています。
content-typeに複数のcharsetが付いているのは正しいのでしょうか。正しい場合、どのcharsetを採用するのが正しいのでしょうか。

Re[1]: content-typeに複数のcharset
(#42112) このトピック中2番目の投稿
(環境: WinXP SP2/SeaMonkey1.1)

> httpヘッダのcontent-typeに複数のcharsetが付いています。
> Content-Type: text/html; charset=iso-2022-jp; charset=SHIFT_JIS
> このためfirefox3 rc1では文字化けします。IE7では文字化けしません。
> firefoxはcontent-type:の最後のcharset=SHIFT_JISを採用し、IEはiso-2022-jpと判断しているようです。
> html自体はiso-2022-jpで書かれています。

ソース中の <meta http-equiv="Content-Type" content="text/html; charset=iso-2022-jp" /> もあります。
IEの場合は、HTTPヘッダーよりもメタタグを優先している結果か、常に自動判別が働く結果(Esc=0x1Bがあるので、Shift_JIS,ESC-JPにはなり得ない)だと思います。
IE8では、このあたりの仕様は変わると思いますけど。

> content-typeに複数のcharsetが付いているのは正しいのでしょうか。正しい場合、どのcharsetを採用するのが正しいのでしょうか。

RFCに、一つだけ指定するのが本来の意図のパラメーターを複数指定してはならない、という明確な記述はないですから、「明らかに不正なヘッダーである」とは言い切れません。
しかし、一つだけ指定するのが本来の意図のパラメーターを複数指定しても構わない、と書いてあるわけでもないですから、「明らかに正しいヘッダーである」とも言えません。
RFCは「規格」ではなく「マナー集」みたいなものですから、「正しくない」の基準は不明確だし、正しくない場合の処理などについてはほとんど何も書いてない。
「刑法」みたいなものでもないから、罰則規定なんてものも当然あるわけがない。
RFCの、美点だけれど欠点でもある部分ですね(欠陥と言いたくなる時も多い)。

すでに指定があったら後ろの重複した指定を無視する、というようなコーディングよりも、
パラメーターを順番に解釈していくだけ、というほうが楽です。
また、一つだけ指定するのが本来の意図ですから「順番に解釈」で構わないはずです。
後ろの指定のほうが採られるケースの方が多いように思います。

Re[1]: content-typeに複数のcharset
(#42113) このトピック中3番目の投稿
(環境: WinXP SP2/IE7)

> http://www.oracle.co.jp/ofc_owa/deliv/mdsp?p=317F721557652E9B
> のhttpヘッダのcontent-typeに複数のcharsetが付いています。
> Content-Type: text/html; charset=iso-2022-jp; charset=SHIFT_JIS

以下のhttpヘッダ情報が返送されました。
HTTP/1.1 200 OK
Transfer-Encoding: chunked
Date: Fri, 23 May 2008 00:13:22 GMT
Server: Apache
Vary: Accept-Encoding
----------------: ----
--------------: ----
Content-Type: text/html; charset=Shift_JIS
Connection: close

charsetは、Shift_JIS だけです。
HTMLソースは、iso-2022-jp で書かれており、meta タグも、iso-2022-jp の指定があります。
複数のcharsetではなく、HTTPヘッダ情報のcharset指定と、HTMLソース(又はcharset指定)内容が
一致していないだけではないでしょうか。

                               from youfo

Re[2]: content-typeに複数のcharset
(#42114) このトピック中4番目の投稿
(環境: WinXP SP2/IE7)

> 以下のhttpヘッダ情報が返送されました。
> HTTP/1.1 200 OK
> Transfer-Encoding: chunked
> Date: Fri, 23 May 2008 00:13:22 GMT
> Server: Apache
> Vary: Accept-Encoding
> ----------------: ----
> --------------: ----
> Content-Type: text/html; charset=Shift_JIS
> Connection: close
>
> charsetは、Shift_JIS だけです。

申し訳ありません。上記の内容は誤りでした。
→URLを直接指定しないで、本スレッドのリンクをクリックしたため
正しくは、
HTTP/1.1 200 OK
Date: Fri, 23 May 2008 00:43:01 GMT
Server: Oracle-Application-Server-10g
X-DB-Content-length: 13093
Transfer-Encoding: chunked
Content-Type: text/html; charset=iso-2022-jp; charset=SHIFT_JIS
----------------: ----
のように、複数のcharsetが指定されていました。 Embarassed

                                from youfo

Re[2]: content-typeに複数のcharset
(#42122) このトピック中5番目の投稿
(環境: WinXP SP2/Other)

> ソース中の <meta http-equiv="Content-Type" content="text/html; charset=iso-2022-jp" /> もあります。

はい。

> IEの場合は、HTTPヘッダーよりもメタタグを優先している結果か、常に自動判別が働く結果(Esc=0x1Bがあるので、Shift_JIS,ESC-JPにはなり得ない)だと思います。

EUC-JPですね。

> IE8では、このあたりの仕様は変わると思いますけど。
>
>>content-typeに複数のcharsetが付いているのは正しいのでしょうか。正しい場合、どのcharsetを採用するのが正しいのでしょうか。
>
> RFCに、一つだけ指定するのが本来の意図のパラメーターを複数指定してはならない、という明確な記述はないですから、「明らかに不正なヘッダーである」とは言い切れません。

投稿する前にRFCを読んでみたのですが、おっしゃるとおり複数指定できないという記述が見つけられなかったので、firefoxの挙動が正しいのかどうか分からず、質問してみました。

> また、一つだけ指定するのが本来の意図ですから「順番に解釈」で構わないはずです。
> 後ろの指定のほうが採られるケースの方が多いように思います。

firefoxの挙動は間違いではなく、webサイトの挙動も本来の意図からすればよろしくないということが分かりました。できればサイトの設定を直してほしいですが、http://www.mozilla.gr.jp/standards/ はまだ生きているのでしょうか。

Re[1]: content-typeに複数のcharset
(#42126) このトピック中6番目の投稿
(環境: Mac/Minefield)

> html自体はiso-2022-jpで書かれています。
> content-typeに複数のcharsetが付いているのは正しいのでしょうか。

複数付いているのが正しいのかどうかはさておき、iso-2022-jp で書かれているのに charset=SHIFT_JIS があるのは間違いじゃないでしょうか。

Re[2]: content-typeに複数のcharset
(#42130) このトピック中7番目の投稿
(環境: WinXP SP2/SeaMonkey1.1)

> 複数付いているのが正しいのかどうかはさておき、iso-2022-jp で書かれているのに charset=SHIFT_JIS があるのは間違いじゃないでしょうか。

実際はそうですけど、規則に照らしあわせて考えた時は、
「charset=SHIFT_JISが指定されているにも関わらず、データの内容がiso-2022-jpのまま」
というほうが近く、クライアントから見ると、
1.キャッシュサーバーが、データの文字コードをiso-2022-jpからShift_JISに変換(RFCで明示的に許可している動作)するつもりで、
Content-Type:charset=iso-2022-jp;の後ろにcharset=SHIFT_JIS;を追加した(RFCで、明示的に許可しているわけではないが、明示的に禁止もしていない動作)、
2.しかし、内容をiso-2022-jpからShift_JISに変換するのを忘れた
と言う状況になります。

この状況を、オリジナルのサーバー上で最初から作っている、というわけで、
サーバー側の設定ミス(あるいは、不適切な設定の時の、予想とは異なる動作orバグ)でしょうね。
そして、例によって例のごとく、IEでしか表示確認をしないので誰も気がつかない...


このトピックの全ページ / [0]

返信不可


- Child Tree -