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でしっかりとコンバートする必要があります。