- 締切済み
掲示板に携帯から書き込むとURLエンコード
PHPを使って掲示板を作成しています。 UTF-8でPHPファイルを作成し、UTF-8のテキストファイルにログをためていく感じで作っています。 PCでは、だいたい正常に動くようになったのですが、携帯電話(au/W61S)からの投稿を試してみたところ、投稿結果がURLエンコードの状態になってしまいました。。。 %82%c6%82%a4%82%b1%82%a4%82%c4%82%b7%82%c6 さらにシフトJISでエンコードされているようでしたので、自分のつたない知識を総動員して、以下のような処理をさせることでなんとか形にはなったのですが、かなり処理としては乱暴な気がしています。 携帯電話からの投稿というのは、URLエンコードとして受け取るしかないのでしょうか(auでしか試していないため、他のキャリアだと別の問題が発生するのでしょうか?) また、下記の方法よりももっとスマートに携帯からの投稿を、表示できる文字列に変換する方法をご存じの方がいらっしゃいましたら、ご教授いただければ幸いです。 よろしくお願いいたします。 <?php //フォーム内に入力された文字列を取得 $test = $_GET['formtxt']; //先頭の文字を抽出 $firsttxt = substr($test,0,1); //先頭の文字列が%であれば、URLデコードを行い、シフトJISからUTF-8に変換する if($firsttxt == "%"){ $test = urldecode($test); $test = mb_convert_encoding($test,'UTF-8','SJIS'); } ?>
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- nick9090
- ベストアンサー率26% (102/378)
>PCからの投稿の場合は、自動でデコードがかかるけれど、携帯からの投稿だとデコードがかからないのですね。 問題の切り分けのために、まずはフォームから投稿されたデータをそのまま表示するだけのスクリプトで試してみてください。 <?php print_r($_POST); ?> これでPCと携帯とで違いが出るなら、さらに複数の機種の携帯でもやってみる(友達などに協力してもらう)。どの機種でやっても同じ結果なら、PCと携帯との間に何か違いあるということになります。逆に、機種によってはPCと同じ結果になるならば、ある機種固有の問題である可能性が高くなります。 >それとも、これはSJISだからでしょうか。 それも問題の切り分けをしてテストしてみてください。 そもそもHTMLをSJIS以外で書いてみるとか、フォームのaccept-charset属性を明示するとか。 何事も、エラーや動作がおかしいときは、いろんなパターンでテストを繰り返すのが一番の近道です。
- nick9090
- ベストアンサー率26% (102/378)
今後の流れを考えると、sjisではなくやはりUTF-8で作るべきだと思います。 で、そもそもGETやPOSTでの送信データというのは、携帯だろうがPCだろうが結局URLエンコードされて送られるものだと思うんですが。日本語がそのまま通信ネットワークを流れるわけじゃなくて、ブラウザが入力された日本語をURLエンコード(英数字に変換)して送信してくれてるんです。
お礼
>で、そもそもGETやPOSTでの送信データというのは、携帯だろうがPCだろうが結局URLエンコードされて送られるものだと思うんですが。 なるほど、とするとPCからの投稿の場合は、自動でデコードがかかるけれど、携帯からの投稿だとデコードがかからないのですね。 それとも、これはSJISだからでしょうか。 そのあたりの理由がわからないために少し混乱していたりします。
- cyanberry
- ベストアンサー率50% (117/230)
携帯サイトは基本的にSJISで作った方が良いですよ。UTF-8に対応できない端末もありますので。 PHPも投稿フォームのcharsetもSJIS(もしくはMS932)にしたらうまくいきませんか?
お礼
ありがとうございます。 今回作成しているサイトは、PCで見てもらうのがメインなのですが、同じソースにCSSをtty,handheldのメディアで読み込ませて、携帯端末でも見られるといいなぁ、と思ってチャレンジ中です。 いろいろなWebアプリケーションとの連動とか、後々MySQLも使いたい、との思いから、UTF-8で作成しております。 そうなんですね、SJISが基本なのですね・・・ UTF-8で作ったサイトって、対応しない端末だと文字化けするってことですよね? SJIS化も検討してみます。 ありがとうございました。
補足
その後、調べてみたところ、 http://miniturbo.org/2006/12/29/034842 こちらのサイトで検証結果が出ておりました。 今はUTF-8でも、結構大丈夫みたいです。 もうちょっとがんばってみます。
お礼
ありがとうございます。 お返事が遅くなってしまい、申し訳ございません。 教わったとおり、いろいろ検証してみました。 ごくカンタンなプログラムで試したところ、PCでも携帯でも現象が起きませんでした。 数種類のテストを行った結果、 <form action="test2.php" method="post" enctype="multipart/form-data" name="registform" id="registform"> のように<form>タグ内にenctype="multipart/form-data"が入っていると現象が起きることが確認できました。 取り急ぎ近くにあった妻の携帯から試したところ、やはりURLエンコードがかかったような表示になりました。 PCからは、IE6、IE7、Firefox2、Firefox3、Safari3で現象は起きませんでしたので、PCからは問題なしと判断しています。 enctype="multipart/form-data"は、掲示板に写真を一緒に投稿してもらうためにつけた属性と値です。 原因がわかったので、この線でもう少し調べてみます。 アドバイスありがとうございました。