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 です。
アドバイスお願いいたします。
No.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);
変換方法としてはそれで合っています。
ありがとうございます。
色々やっているうちに根本的なことが理解できていないことに気付きました。
今回教えていただいたことを頭に入れ、再度新しい質問で質問させていただきます。
お手数をおかけいたしました。
No.3ベストアンサー
- 回答日時:
誤った文字コードでPOSTされる・・というのは過去にブラウザのバグなどでいくつか散見した気がします。
そういう可能性は捨てきれないですね。mb_detect_encodingでutf-8でなかったら、その文字コードからutf-8へ変換するようにしたほうが確実でしょう。私もたまに「文字コードチェック用」のhidden項目をformに追加したりします(確実に判別できる日本語をPOSTさせてチェックする)。
ありがとうございます。
まず訂正です。先程投稿しました「やってみました・・・」の中で、
「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);
といった事で対応する感じで良いのでしょうか?
No.2
- 回答日時:
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(文字化けする)になってしまいます。
引き続きアドバイス頂きたいです。
ありがとうございます。
やはり、.htaccessに記載しないとダメなのでしょうか。。
今自分なりに調べてみたのですが、フォームからの(POSTで受け取っています)データをmb_detect_encodingで調べてみたのですが、UTF-8になる時と(文字化け無し)、EUC-JPになる時(当然文字化け)があります。
教えて頂いたとおり.htaccessに記載すれば直るのでしょうか。
....やってみます。。
No.1
- 回答日時:
>(正確には文字化けする時としない時があります)。
予測ですが、MIMEをきちんと指定してやると解消されると思います。
httpのヘッダ、metaタグ、出力する文字など適切に処置しましょう。
>今回UTF-8で作りたいのですがどうしたら良いのでしょうか?
.htaccessで明示的に指定しましょう。
設定の仕方は他の人に期待(終電がぁー
ありがとうございます。
HTML(テンプレート)には
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
と記述しています。
.htaccessに記載しないとダメなのですかね。
他のサーバーにも使いたいので、毎回.htaccessを弄るのも。。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP phpのメールフォームの完了画面でメール受信のコードを書いています。 1 2023/05/31 11:39
- PHP Content-Typeが機能していない? 2 2022/07/17 11:10
- PHP PHP MySql 画像を取得 1 2022/06/04 14:05
- Excel(エクセル) 文字化け。メモ帳でUTF-8に変換後、エクセルへ貼り付けたいです。 3 2022/08/14 07:21
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- PostgreSQL PostgressからMySQL(MariaDB)へ構造を変更する際のTimestamp等について 2 2023/04/04 12:09
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- HTML・CSS <meta charset="utf-8"><!-- 文字化け防止ユニコード --> ?最近モバイル 1 2022/12/11 04:27
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
$str=preg_replace('/\\u3000/'...
-
XML出力時の日本語一部文字化け
-
mysql utf8、php・euc-jp で出...
-
文字化け
-
ハシゴの「高」が「?」に置き...
-
onedrive にexcelファイルをア...
-
VBSの「MsgBox」について
-
こちらはただの直列処理ですか?
-
複数ファイルを連続でダウンロード
-
パースエラーとは?
-
リンク先を隠す方法はないでし...
-
拡張子php画像をjpg画像等に変...
-
図に示す階層構造で,現在のデ...
-
C# Excelファイルへの画像挿入。
-
PHPとCSVで簡易データベースな...
-
Subversionで、ファイルをリネ...
-
ワードプレス、Contact Form 7...
-
include先でのinclude元の変数...
-
PHPのif文でその処理を途中で抜...
-
PHPでネットワークドライブのop...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エンコーディングについて
-
phpのhex2binについてphpで、ut...
-
ハシゴの「高」が「?」に置き...
-
PHPでCSV出力時の文字化け(一部)
-
$str=preg_replace('/\\u3000/'...
-
PHPの文字化けした文字だけ削除...
-
phpMyAdminで文字化け
-
【PHP】ファイル読み込みで...
-
MySQL文字コード
-
windowsXP、XAMPPでメーラーMer...
-
i18n_convert と mb_convert_e...
-
データベースから取り出した日...
-
scandir関数取得結果の文字化け
-
PHPフォーム→PHP確認画面で...
-
文字化け
-
XML出力時の日本語一部文字化け
-
header("location~")をPOSTで...
-
PHPの文字コード (php.iniの...
-
PHPExcelで日本語(漢字)ファ...
-
mysql utf8、php・euc-jp で出...
おすすめ情報