質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

2385閲覧

文字化け対策

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

1クリップ

投稿2015/08/05 01:50

既成のHTML/JS/PHP混成の問い合わせフォームを設置していて、
十中八九問題ないのですが、
まれに文字化けしてしまうので困っております。

元の:
http://microengine.jp/mailform/

PHPのmbstring設定:
mbstring.language = Japanese
mbstring.internal_encoding = EUC-JP
mbstring.http_input = auto
mbstring.http_output = pass
mbstring.encoding_translation = On
mbstring.detect_order = auto
mbstring.substitute_character = none;

配布元の想定としてはすべてUTF-8で処理する感じでしたが、
EUC-JP処理するのに合わせて
phpファイル群とメール送信ひな型ファイルはEUC-JPにしてあります。

文字化けすると日本語箇所がすべて????みたいになってしまいます。
問い合わせフォーム製作元にも問い合わせ中ですが、
早く対策したいため、こちらでもよろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

mbstring.language = Japanese mbstring.internal_encoding = EUC-JP mbstring.http_input = auto mbstring.http_output = pass mbstring.encoding_translation = On mbstring.detect_order = auto mbstring.substitute_character = none;

これは各設定の意味を理解して設定しているのでしょうか?

mbstring.http_inputautombstring.http_outputpass なのは、なぜそうしているのかちょっと説明してもらっていいですか?


mbstring.http_input のエンコーディングの自動判別は PHP の闇の一つなので、本当に入力値が 未知 でないかぎり使うべきではありません(通常そんなことはありえない)。

HTML の文字エンコーディングは何になっていますか?(ブラウザに出力されている文字コード)

mbstring.http_outputpass ということは HTML も euc-jp で出力されていると思うので、

mbstring.encoding_translation = Off

として無効にするほうが良いと思われます。

投稿2015/08/05 02:24

編集2015/08/05 02:36
ngyuki

総合スコア4514

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2015/08/05 02:43 編集

http_inputがautoで、入力エンコードを誤判定しているような気がしますが、共用レンタルサーバーのサーバー会社が初期設定したままらしく、しかもこちらでは直せないと分かりました。(大丈夫か?このサーバー。) movabletype4がこの設定で動作しているのですが、もしphp.iniを直せるとした場合に影響が出るのか出ないのかわからず、手を出せておりません。
ngyuki

2015/08/05 02:36

追記しました
退会済みユーザー

退会済みユーザー

2015/08/05 03:56

ご指摘内容を検討し、php冒頭でini_set()することで対策しました。 ini_set('default_charset', 'UTF-8'); ini_set('mbstring.language', 'Japanese'); ini_set('mbstring.internal_encoding', 'UTF-8'); ini_set('mbstring.http_input', 'pass'); ini_set('mbstring.http_output', 'pass'); ini_set('mbstring.encoding_translation', 'Off');
ngyuki

2015/08/05 04:02

> ini_set('mbstring.internal_encoding', 'UTF-8'); > ini_set('mbstring.http_input', 'pass'); > ini_set('mbstring.encoding_translation', 'Off'); その辺りの設定は `ini_set` ではダメだったと思います。なぜなら、PHP の処理が開始した時点で入力は終わっているからです。 php.ini や .htaccess で設定する必要があります。
退会済みユーザー

退会済みユーザー

2015/08/05 04:16 編集

.hraccessを、 AddHandler x-httpd-php524 .php php_value mbstring.language Japanese php_value mbstring.encoding_translation Off php_value mbstring.internal_encoding UTF-8 php_value mbstring.http_input pass としたのですが、今度は500エラーが解消できません。
ngyuki

2015/08/05 04:16

.htaccess で設定する場合は少し違う記法にする必要があります。 とりあえず下記の2つを設定しておけばいいのではないでしょうか。 ``` php_flag mbstring.encoding_translation off php_value mbstring.http_input "pass" ``` それ以外は ini_set でよいと思うので。
退会済みユーザー

退会済みユーザー

2015/08/05 04:22 編集

AddHandler x-httpd-php524 .php php_flag mbstring.encoding_translation Off php_value mbstring.http_input pass としましたが、まだ500エラーが継続中です。すみません。
ngyuki

2015/08/05 04:26

こうするとどうですか? php_value mbstring.encoding_translation 0 php_value mbstring.http_input "pass" あと、お使いの PHP は Apache モジュール版ですか? CGI ですか?
退会済みユーザー

退会済みユーザー

2015/08/05 04:32

.htaccess 1行目にAddHandler行を書いてやっとphpが動く共用レンタルサーバーで、 Apache/1.3.37 Ben-SSL/1.57 (Unix) PHP: 5.2.8 /5.2.4 /4.4.9 /4.4.7 ってところまでしか情報ありません。 --- AddHandler x-httpd-php528 .php php_value mbstring.encoding_translation 0 php_value mbstring.http_input "pass" --- としても500エラーのままで。
ngyuki

2015/08/05 04:35

以下のコードをサーバにアップロードしてブラウザで表示すると何が表示されますか? <?php var_dump(php_sapi_name());
退会済みユーザー

退会済みユーザー

2015/08/05 04:45

string(3) "cgi" とでました。
ngyuki

2015/08/05 04:54

では .htaccess では設定できません。 php.ini あるいはレンタルサーバの方で提供されている別の方法で設定してください。
退会済みユーザー

退会済みユーザー

2015/08/05 07:22

PHPはCGI版動作しか対応していないこと、 元のメールフォーム製作元に問い合わせたところ有償サポートになること、 などのために、一度設置した問い合わせフォームを捨てて、 別のPerl動作メールフォームに入れ替えることで完了としました。 (超絶がっかりですが。)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問