RSS/SEO/Google/マッシュアップ/ちょっとした豆知識/エンタメ系など
fkoji.com > F.Ko-Jiの「一秒後は未来」 > 携帯サイトをUTF-8で出力するかShift_JISで出力するか
2008 09 21

携帯サイトをUTF-8で出力するかShift_JISで出力するか

スポンサード リンク

携帯サイトをUTF-8で出力しようかShift_JISで出力しようか悩んでいました。

超手抜きでウェブサイトをモバイル対応 2008 - 15Pubを読むと「UTF-8でも大丈夫」とあるのですが、ウノウラボ Unoh Labs: 携帯サイト作成時のXHTMLでの相違点では「文字コードはShift_JIS」と書いてあります。

ネットで調べてみるとポイントになっているのは au の仕様で、公式ページには「EZwebでサポートする文字コードはShift-JISです」とあるにも関わらず、UTF-8でも文字化けすることなく表示できてしまうとのこと。

色々迷った挙げ句、「楽だから」という理由でまずはUTF-8で出力することにしました。

HTMLのContent-Typeは以下のように記述。

<meta http-equiv="content-type" content="application/xhtml+xml; charset=UTF-8" />

さらにHTTPヘッダでも以下のヘッダを返すように設定。

Content-Type: application/xhtml+xml; charset=UTF-8

これで大丈夫かなと思ったら、auを使っている友人から「文字化けしとるぞ」と言われてしまいました。(自分はauの実機を持っていない)

そこで、やはり無難にShift_JISにしたほうがいいのかな、と思ってやり直し。

Shift_JISに方針転換

プログラムやテンプレートファイルなどすべてUTF-8で書いているので、出力だけShift_JISにします。Smartyを使っているので、文字コードを変換するアウトプットフィルタを設定すれば済みます。

$smarty = new Smarty();
$smarty->load_filter('output', 'convert_encoding');

作成するプラグインは次のようなもの。

function smarty_outputfilter_convert_encoding ($output, &$smarty) {
    return mb_convert_encoding($output, 'SJIS-WIN', 'UTF-8');
}

わかりやすくするために、文字コードのところは定数にしていません。SJIS-WINを使っているのはこちらを参照。(ke-tai.org > Blog Archive > PHPで絵文字を壊さずに文字コードや全角半角変換を行う方法)

さらに、Shift_JISのページではフォームから送信されるデータの文字コードもShift_JISになるため、アプリケーションのフロントエンドで GET と POST の値をすべて UTF-8 に変換します。ここでもSJIS-WINから変換するようにすれば絵文字が崩れません。フロントエンドで変換したうえでアプリケーションにフォーム変数を渡します。

こうすることでプログラム内部ではUTF-8のデータが流れるので、データベースに保存される文字コードなどを気にする必要もありませんし、パソコン向けページはそのままUTF-8で出力ができます。

あとはHTTPヘッダとmetaタグのcharsetをShift_JISにします。

はてなブックマーク数 livedoor クリップ Buzzurl

English version

「携帯サイトをUTF-8で出力するかShift_JISで出力するか」を携帯で読む

前のエントリー: « 今年を代表するチームリーダーに東国原知事らを選出
次のエントリー: auはContent-Typeのヘッダの間違いに厳しい? »

トラックバック

このエントリーのトラックバックURL:

この一覧は、次のエントリーを参照しています: 携帯サイトをUTF-8で出力するかShift_JISで出力するか:

» auはContent-Typeのヘッダの間違いに厳しい? from F.Ko-Jiの「一秒後は未来」
先ほどの「携帯サイトをUTF-8で出力するかShift_JISで出力するか」の続きというかそれ以前の話。 auで「文字化け」の問題が発生する以前に、「『リ... [詳しくはこちら]

コメント

同じように悩んで、結局 UTF-8で作っちゃいました。
何人かのAUユーザーに試してもらっていますが、文字化けがあったという報告はありませんでした。

FROM でGETを投げたときに UTF-8ではなくSJISでパラメータが飛んでくるという問題はありましたが、GETではなく、POSTにしたら大丈夫でした。

もし、よろしければ、文字化けした機種を教えていただけないでしょうか。

>> rtiさん
コメントありがとうございます。

友人の機種は INFOBAR 2 (デバイスID: ST33) のはずです。

FORMの件もちらっと見かけたのでSJISにしましたが、POSTとGETで違うんですね。。。

コメントを投稿

(承認されるまでコメントは表示されません。)




このブログをRSSリーダーで簡単購読
Subscribe with livedoor Reader Add to Google My Yahoo!に追加 Subscribe with Fastladder Bloglinesで閲読登録 はてなRSSに追加 エキサイトリーダーに登録

タイトル:

URL:

リンク用HTMLタグ:

powered by Google Chart API

梅酒コミュニティサイト

梅酒.in

Ad

なんかいろいろ

このブログの読者はこんなブログも読んでます。
あわせて読みたい

はてなブックマークカウンター

track feed

フィードメーター - F.Ko-Jiの「一秒後は未来」

スカウター : F.Ko-Jiの「一秒後は未来」








携帯からのアクセスは

QRコード
http://mob.fkoji.com/