文字コードをキャリア共通のShift_JISに変換する

By katou - 08/09/11 - このエントリをはてなブックマークに追加このエントリをYahoo!ブックマークに追加このエントリをdel.icio.usに追加このエントリをFC2ブックマークに追加

PCサイトであればHTMLもサーバー側に合わせれば文字化けすることも減ると思いますが

携帯サイトを作成するにあたって各キャリア共通の文字コードで作成しなければ

特定のキャリアで見た時だけ文字化けする。という問題が起きます。

各キャリアの文字コード

docomo

http://www.nttdocomo.co.jp/service/imode/make/content/xhtml/

au

http://www.au.kddi.com/ezfactory/tec/spec/4_2.html

softbank

http://creation.mb.softbank.jp/column/column_01_01.html

たとえば、文字コードがShift_JISで作成している携帯サイトのフォームから

文字コードがEUC-JPのサーバーにデータを送信し

サーバー側のスクリプトで携帯から受け取った値を加工した場合、

文字コードの変換をせずにデータを携帯に返すと文字化けします。

以下はマルチバイト文字を対象にコンバートしています。

index.html

<form name="form" method="post" action="index.php">

<input type="text" name="postvalue" value="てきすと" />

<input type="submit" value="送信" />

</form>

index.php

$str = $_POST['postvalue'];

//この時点ではSJIS

$str = mb_convert_encoding($str , "EUC-JP", "SJIS");

//mb_convert_encoding(変換させたい値 ,"変換後の文字コード" ,"変換前の文字コード);

$str = mb_strimwidth($str,0,2);

//文字列を指定したバイト数に切り詰めています。0バイト目から2バイト

$str = mb_convert_encoding($str , "SJIS", "EUC-JP");

echo "切り詰めた値⇒" . $str . "<br />";

var_dump(mb_detect_encoding($str));

HTMLやPHPの開始タグなどは省略させていただきます。

フォームからデータを受け取り、サーバー側のスクリプトでデータを加工するには

mb_convert_encodingでしっかりとコンバートする必要があります。