2009年06月25日

【PHP入門】Auの携帯からPOSTでデータを送る

PHPで作成したページで、Auの携帯電話からPOSTで文字を送ると、文字化けを起こしてしまいます。

docomoやsoftbankでは正常に表示されるのですが、Auでは
”%A5%C7%A5\0”
のように表示されてしまいます。

これは、Au独自の2つの問題によって発生することがあります。
1.POSTで送信されたデータの末尾に「\0」をつける
2.文字コードが「ASCII」で送信される。

Auでは、独自の変換モジュールを介してhtmlを表示するようで、文字コードをしっかりと指定しなければ表示されないことがあるそうです。今回は、文字コードをShift_JISで指定した場合にも発生した事象についてまとめました。

※デフォルトはShift_JISのページでテストしました。
※テストでは、AuのCA001を使用しています。

1.の問題は、stripslashes関数で\(バックスラッシュ)部を変換することで解決します。

$text = stripslashes($_POST["text"]);

これにより、文字列は”%A5%C7%A5\n””%A5%C7%A5”となります。
また、数字「0」や、チェックボックス「on」なども、「0\0」や「on\0」と入力されるので、stripslashes関数で変換をする必要があります。

2.の問題は、urldecode関数でエンコードされた文字を元に戻し解決します。

$text = urldecode($text);

AuではTEXTをASCIIにエンコードし送るため、受信側でShift_JISにデコードしなければなりません。
※エンコードされていない文字列をデコードしても、文字化けは起こらないようです。

1、2を組み合わせると、

$text = urldecode(stripslashes($_POST["text"]));

これにより、”%A5%C7%A5\0”→”テスト”に変換されました。

 

※この内容に間違いがあっても、責任は負いかねます


posted by くろやん at 2009年06月25日 | Comment(0) | TrackBack(0) | ♪ PHP
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

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