- ベストアンサー
vodafoneが言う事ききません
お世話になります。 携帯3機種対応のサイトを作っています。 Mysqlからデータを読み込み、フォームを使ってMysqlの方にデータを受け渡しをしています。 文字化けで色々と大変だったのですが、 現在は全てEUC-JPで統一する事で docomo,au,vodafone全ての携帯機種で正常にサイトが表示されています。 がっ!! docomo,auではフォームから送信したデータを問題なく受け取ることができるのですが、 vodafoneだけどうしても文字化けしてしまいます。 vodafone用ページを作成して全てshift-jisに統一してもこの問題が解決しません。 色々と調べている中でvodafoneのみEUCに対応しているとの記述を見かけたのですが、 だったら何故?と言わずにいられません。 サーバー・Mysql共にロリポップです。 原因と解決法が知りたいです。 詳しい方、よろしくお願いします。 *初心者です
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>http://developers.vodafone.jp/dp/tech_svc/mail/ そこはメールなので参考になりません。 WEBを見ると >http://developers.vodafone.jp/dp/tech_svc/web/ 基本はSJISのみみたいですね。 私はMysql、PHPともにEUCで吐き出すときのみSJISにしています。 そのときには全て変数に入れ、最後に echo mb_convert_encoding($hoge, "SJIS", "EUC"); として吐き出してますが、文字化けは起こっていません。 (シミュレーター上で) 最初から文字コードが分かっているのでしたら、 mb_detect_encoding は使わずに直接指定したほうがいいと思います。 (たまに間違ってくれるんで) あと、 mb_convert_encoding($string,ENCDB, $det_enc); の書式が違います。 http://php.s3.to/man/function.mb-convert-encoding.html 第二因数に不明な因数が入ってるのが原因かもしれません。(定数ですか?) mb_convert_encoding($string,"SJIS", "EUC"); と知れば解決するかもしれません。
その他の回答 (2)
- Hardking
- ベストアンサー率45% (73/160)
スクリーンに表示する文字コードはSJISにする。 携帯のスクリーンに表示するPHPで出力文字コード設定する。 <?php //Http出力文字コードの設定 mb_http_output("SJIS"); ?>
お礼
御礼が遅くなりすみません 結局EUCのまま(これが何故だかわからないんですが) NO2様の御礼の欄に書いたとおり解決しました。 一緒に考えて下さって有難うございました。 また見かけたらアドバイスお願いします。
補足
ご回答有難うございます。 これは随分前に試して見て、どうも上手くいかず結局全てEUCになってしまったという経緯があります。 それ以前に、no.2のご回答でご指摘頂いている分がやはりネックになっているのかと思いますので、 先にそっちを触ってからoutputしてみたいと思います。 少し戦ってきますので、御礼が遅くなると思います。 すみませんがよろしくお願いします。
- moon_night
- ベストアンサー率32% (598/1831)
携帯はSJISで作ったほうが無難です。 EUC対応とされている場合も、昔の機種ではつかえなかったり・・・ FORMと処理するスクリプトと吐き出し、SQLの文字コードを見てください。 どこかしらで違う文字コードで処理してませんか? Vodaだけ変な文字コードで送り返してくれるとか。
お礼
更に色々と試してみましたが、どうにもなりません。 よく見るとvodafoneの全ての機種にISO-2022-JP (JISですよね?)があったので、 EUCとSJISだけで何とかしようと思うのが間違いなのかと思いはじめました。 そこで、コード変換のスクリプトを使用したいと思うのですが、 http://www.spencernetwork.org/jcode/ どのように組み込むのかイマイチわかりません>< マニュアルどおり、スクリプトの先頭でrequire()してみましたが。。。ダメでした // 配列データを一括変換 function cnv_formstr($array) { foreach($array as $k => $v){ // 「magic_quotes_gpc = On」のときはエスケープ解除 if (get_magic_quotes_gpc()) { $v = stripslashes($v); } if (isset($array["act"])) { if ($array["act"] != "end") { $v = htmlspecialchars($v); } } $array[$k] = $v; } return $array; } // データをSQL用に変換 function cnv_sqlstr($string) { if (!get_magic_quotes_gpc()) { return addslashes($string); } else { return $string; } } // 表示する文字コードに変換 function cnv_dispstr($string) { // 文字コードを変換する $det_enc = mb_detect_encoding($string, "EUC-JP","SJIS"); if ($det_enc and $det_enc != ENCDB) { return mb_convert_encoding($string,ENCDB, $det_enc); } else { return $string; } } よろしくお願いしますm(_ _)m
補足
ご回答有難うございます。 >携帯はSJISで作ったほうが無難です 私もそう思うんですが、何故かSJISにならなくて なんとかEUCで表示できるようになり、voda以外は正常に動作しちゃってます。 このスクリプトを作った方が入院されているので聞くに聞けない状態で・・・ 出来る事ならSJISになりたいです^^; 文字コードも確認しましたが、 sqlはEUC、スクリプト・吐き出し・フォーム・・・全てEUCになってます。 一箇所だけSJISと書いてる部分があるんですが、 ------------------------ /*フォームのスクリプト*/ function cnv_dispstr($string) { // 文字コードを変換する $det_enc = mb_detect_encoding($string, "EUC-JP,SJIS"); if ($det_enc and $det_enc != ENCDB) { return mb_convert_encoding($string,ENCDB, $det_enc); } else { return $string; } } -------------------------- (↑こんな感じで) 表示する文字コードに変換部分なのでフォーム内容の受け渡しとは関係ないようにも思うんです・・・・ このSJISを消してしまうとフォームそのものがかえって文字化けします。 http://developers.vodafone.jp/dp/tech_svc/mail/ ここも見て、やはりEUCが使えるんだと確認しました。 vodaそのものがよくわからないのですが 最近の機種がMMS対応機なんでしょうか?? 機種そのものがEUCに対応していないのでしょうか。 すみません、もしよろしければ再度よろしくお願いします
お礼
御礼が遅くなりすみません ENCDBをENCDISPに変更し、 フォームデータ変換部分に少し手を加える事で解決しました。 一緒に考えて下さって有難うございました。 また見かけたらよろしくお願いします
補足
再度のご回答有難うございます。 別の設定ファイルに //表示文字コード define("ENCDISP", "EUC-JP"); //データベース文字コード define("ENCDB", "EUC-JP"); とあり、 mb_convert_encoding($string,ENCDB, $det_enc); の部分のENCDBがこれにあたると思います。 設定ファイルの表示文字コード define("ENCDISP", "SJIS"); にしてみましたが、 ここ↓ $det_enc = mb_detect_encoding($string, "SJIS","EUC-JP"); if ($det_enc and $det_enc != ENCDB) { return mb_convert_encoding($string,ENCDB, $det_enc); } else { return $string; } } を、どう触れば良いのか 部分的に変えてみたりしたのですが if とか else とかあると怖くって大きく変更できないです>< 部分・部分は調べると意味が出てくるのでそうなんだー・・・と理解できるのですが・・・。 echo mb_convert_encoding($hoge, "SJIS", "EUC"); これは、このスクリプトに対応するhtmlの方に記述するものなのでしょうか? 何度も本当に申し訳ありません。 実は(バレてると思いますが)とっても素人なのでよろしくお願いしますm(_ _)m もちろん、こうしている間にも頑張って調べてますので、どうか見捨てないで下さい(T▽T)