アプリ版:「スタンプのみでお礼する」機能のリリースについて

PHPにて簡単な以下のようなアプリを勉強がてら作っています。
1.登録フォームを表示
2.確認画面表示
3.DB(MySQL)にデータ登録
そこで質問なのですが、フォームから入力し確認画面を表示するときに、フォームから入力した文字が文字化けしてしまいます(正確には文字化けする時としない時があります)。
出力ページはSmartyを使っています。
テンプレートはUTF-8を使っており、テンプレート内の文字は文字化けしません。PHPソースもUTF-8で書いてあります。
各PHPソースには
mb_language("uni");
mb_internal_encoding("UTF-8");
mb_http_output("UTF-8");
と記述しています。
DB(MySQL)のテーブルはUTF-8にしてあります。
1点気になるのは、某ホスティングサービス上で作っているのですが、PHPinfoで見てみるとmb_internal_encodingはEUC-JPになっています。
今回UTF-8で作りたいのですがどうしたら良いのでしょうか?
環境は、
Apache 1.3.34 / PHP 4.3.7 / MySQL 4.1.21 です。
アドバイスお願いいたします。

A 回答 (4件)

>10回に1回程度


と言うのが不可解ですね。。
その現象の原因でよくあるパターンとしては

・ロードバランサなどを使用し負荷分散しているが、全サーバの同期が取れていない
 →ホスティングサーバ側の問題なので如何ともしがたい
・クライアント側の設定の問題
 →ie5世代はF5連打したときhttpクエリがたまに崩れた記憶が。
・httpヘッダに記述がないせいでブラウザが文字コードを正しく認識していない
 →php側でheader('content-type:text/html;charset=""UTF-8');と記述しましょう

くらいですかね。
telnetなどで連打し、取得したhttpクエリがたまに変化してたりしないか見ると良いかもしれません。


>$enc = mb_detect_encoding();
>if($enc != "UTF-8") $str = mb_convert_encoding ($str,"UTF-8",$enc);
変換方法としてはそれで合っています。
    • good
    • 0
この回答へのお礼

ありがとうございます。
色々やっているうちに根本的なことが理解できていないことに気付きました。
今回教えていただいたことを頭に入れ、再度新しい質問で質問させていただきます。
お手数をおかけいたしました。

お礼日時:2008/01/26 00:45

誤った文字コードでPOSTされる・・というのは過去にブラウザのバグなどでいくつか散見した気がします。

そういう可能性は捨てきれないですね。

mb_detect_encodingでutf-8でなかったら、その文字コードからutf-8へ変換するようにしたほうが確実でしょう。私もたまに「文字コードチェック用」のhidden項目をformに追加したりします(確実に判別できる日本語をPOSTさせてチェックする)。
    • good
    • 0
この回答へのお礼

ありがとうございます。
まず訂正です。先程投稿しました「やってみました・・・」の中で、
「phpinfo()のmb.internal.encodingはUTF-8で変わらず。」は
「phpinfo()のmb.internal.encodingはEUC-JPで変わらず。」の間違えです。

回答いただきました内容ですが、
$enc = mb_detect_encoding();
if($enc != "UTF-8") $str = mb_convert_encoding ($str,"UTF-8",$enc);
といった事で対応する感じで良いのでしょうか?

お礼日時:2008/01/25 00:08

No.1の方に補足ww



mb_internal_encodingはPHP_INI_ALLですから、.htaccessで設定可能ですね(サーバがディレクトリごとのphp.iniを有効にしていればそちらでも可)。

http://www.php.net/manual/ja/ini.php

.htaccessに

php_value mb_internal_encoding "UTF-8"

と書いて、phpinfo()でlocal_valueを確認してください。

この回答への補足

やってみました。
PHPファイルのあるディレクトリに教えて頂いた.htaccessを置いてみました。
結果、
phpinfo()のmb.internal.encodingはUTF-8で変わらず。
10回に1回程度、EUC-JP(文字化けする)になってしまいます。

引き続きアドバイス頂きたいです。

補足日時:2008/01/24 23:50
    • good
    • 0
この回答へのお礼

ありがとうございます。
やはり、.htaccessに記載しないとダメなのでしょうか。。

今自分なりに調べてみたのですが、フォームからの(POSTで受け取っています)データをmb_detect_encodingで調べてみたのですが、UTF-8になる時と(文字化け無し)、EUC-JPになる時(当然文字化け)があります。

教えて頂いたとおり.htaccessに記載すれば直るのでしょうか。
....やってみます。。

お礼日時:2008/01/24 23:39

>(正確には文字化けする時としない時があります)。


予測ですが、MIMEをきちんと指定してやると解消されると思います。
httpのヘッダ、metaタグ、出力する文字など適切に処置しましょう。

>今回UTF-8で作りたいのですがどうしたら良いのでしょうか?
.htaccessで明示的に指定しましょう。
設定の仕方は他の人に期待(終電がぁー
    • good
    • 0
この回答へのお礼

ありがとうございます。
HTML(テンプレート)には
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

と記述しています。
.htaccessに記載しないとダメなのですかね。
他のサーバーにも使いたいので、毎回.htaccessを弄るのも。。

お礼日時:2008/01/24 23:35

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!