スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

header「application/xhtml+xml」を送るとバグる

今更という感じですが、i-CSSについて覚えようとしています。

i-CSSというのはi-mode専用のCSSみたいなもので、これを使えるとi-modeで携帯向けサイトを作る時に見た目がおしゃれな感じに出来たりします。

というかEZweb(au)やYahooケータイ(Softbank)では普通にXHTMLの記述をしてCSSの記述をしてやればそれなりに解釈してくれるんですが、i-mode(Docomo)の場合は殆ど解釈してくれず、i-CSSの仕様を見ると「なんじゃこりゃ?」的な仕様。

そんなんだから今まで敬遠していたんだけど、なんだかそうもいかなさそうなので、意味不明なi-CSSを覚えてみる事にしましたよ。

で、実際にi-CSSを使えるようにする為には、headerで「content="application/
xhtml+xml;
charset=Shift_JISもしくはUTF-8"」を送信しなきゃいけないんですね。
例えばPHP内で

header("Content-Type: application/xhtml+xml; charset=Shift_JIS");

というコードを書きます。
ただ、これを送信するとmb_output_handlerが機能しなくなるみたい。

要するに、PHPの内部処理をSJIS以外で行っている場合に問題が起きる。

SJISは何かと問題が多いらしい事と、Linuxのデフォルトの日本語文字コードがEUC-JPなので、基本的な処理からデータベースに保存するデータまで全部EUC-JPで統一している。

しかし携帯端末は基本的にSJISじゃないと正しく表示されないので、携帯向けのコンテンツを作るには内部的な処理を終えた後にSJISを出力させる必要がある。

話を戻すと、mb_output_handlerが機能しなくなると、内部的にEUC-JPで処理して、SJISで出力するようにしても、EUC-JPで出力されてしまう。

これはmbstringのバグなのか仕様なのか分からないけど、とにかくそういう内容になっているので、PHPをコンパイルする前のmbstring.cを修正してからじゃないと、「application/xhtml+xml」による問題が発生する。

参考:Angelic Wing
http://angelicwing.net/diary/4553.html

いやー、それにしても携帯の各キャリアの仕様は出来るだけ統一して欲しい。
というか同じキャリアでも再生出来る動画だったりFlashだったり色々な規格に統一性がなさすぎ。
Docomoの904系以降の新機能である、振ってどうこうとかいうAPIも規格がバラバラなんだとか。統一されてりゃぁ趣味とかでもiアプリで面白いものを作る人も出てくるかもしれないのにねぇ、勿体無い。
スポンサーサイト

この記事のトラックバックURL

http://kgworks.blog47.fc2.com/tb.php/151-40be1993

コメント

コメントする

管理者にだけ表示を許可する

Template Designed by DW99

テクノラティ
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。