人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHPで簡単なアプリを作っています。
HTMLフォームとのやり取りで文字化けが出てしまいました。
色々調べてみたのですが混乱して分からなくなりました。
ホスティングを契約しているのですが、以下の環境の場合でPOSTされたデータ($_POST)の文字コードは何になっていると予想できるか教えてください。PHPソースはUTF-8、HTMLもUTF-8で作っています。
サーバ
PHP Version 4.3.7
phpinfoの値
mbstring.detect_order auto
mbstring.encoding_translation On
mbstring.func_overload 0
mbstring.http_input auto
mbstring.http_output SJIS
mbstring.internal_encoding EUC-JP
mbstring.language Japanese
mbstring.script_encoding auto
mbstring.substitute_character no value

お願いいたします。

●質問者: norif_h
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:EUC-JP HTML ON PHP SJIS
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● tezcello
●35ポイント

> mbstring.encoding_translation On

> mbstring.http_input auto

> mbstring.internal_encoding EUC-JP

この辺りから、EUC ではないかと。


僕は、勝手に換えられると分らなくなってしまうので

ini_set('mbstring.http_input', 'pass'); をスクリプトに記述しておく

php_flag mbstring.encoding_translation OFF を.htaccess に記述しておく

をやっています。


http://www.php.net/manual/ja/ref.mbstring.php

◎質問者からの返答

ありがとうございます。

教えていただいたとおり設定すると、出力されるページの文字コードが「Shift-JIS」になってしまいます。

UTF-8で作ってあり、「charset=utf-8」とHTMLに書いているのですが、ブラウザが「Shift-JIS」と認識し文字化けします。


2 ● tezcello
●35ポイント ベストアンサー

> UTF-8で作ってあり、「charset=utf-8」とHTMLに書いているのですが、ブラウザが「Shift-JIS」と認識し文字化けします。

これは、mbstring の設定が

> mbstring.http_output SJIS

となっているからではないでしょうか?

http://www.php.net/manual/ja/function.mb-http-output.php


charset を記述しているのは、meta タグの中にでしょうか?

ブラウザは、先ずWebサーバからのHTTPヘッダからエンコードを判別しようとします。

mbstring.http_output が指定してあると、その値が使われるのだったと記憶しています。

UTF-8 を指定しておくか、

pass にしておいて、UTF-8 であるとヘッダを出す

mb_http_output('pass');

あるいは、ini_set('mbstring.http_output', 'pass'); をスクリプトに記述しておいて

header('Content-Type: text/html; charset="UTF-8"');

とご希望通りになると思います。


回答数制限になるので、コメント欄を開けてもらえればありがたいです。

◎質問者からの返答

ありがとうございます。

とりあえずスクリプトに

ini_set('default_charset', 'UTF-8');

ini_set('mbstring.http_input', 'auto');

ini_set('mbstring.http_output', 'UTF-8');

ini_set('mbstring.internal_encoding', 'UTF-8');

.htaccessに

php_flag mbstring.encoding_translation OFF

と記述したら上手くいきました。

サーバーの設定に影響されないような記述をしたいのですが

上記の感じで良いのでしょうか。

必要ないものはあるでしょうか?

また、「mbstring.encoding_translation」はソース内に書けないのですよね。

php.iniを弄れない場合、.htaccessに書くしかないんですよね。

お願いします。

コメント欄開けておきました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ