文字化け対策
解決済
回答 1
投稿
- 評価
- クリップ 1
- VIEW 1,726
既成の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にしてあります。
文字化けすると日本語箇所がすべて????みたいになってしまいます。
問い合わせフォーム製作元にも問い合わせ中ですが、
早く対策したいため、こちらでもよろしくお願いします。
十中八九問題ないのですが、
まれに文字化けしてしまうので困っております。
元の:
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にしてあります。
文字化けすると日本語箇所がすべて????みたいになってしまいます。
問い合わせフォーム製作元にも問い合わせ中ですが、
早く対策したいため、こちらでもよろしくお願いします。
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
+4
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_input
が auto
で mbstring.http_output
が pass
なのは、なぜそうしているのかちょっと説明してもらっていいですか?
mbstring.http_input
のエンコーディングの自動判別は PHP の闇の一つなので、本当に入力値が 未知 でないかぎり使うべきではありません(通常そんなことはありえない)。
HTML の文字エンコーディングは何になっていますか?(ブラウザに出力されている文字コード)
mbstring.http_output
が pass
ということは HTML も euc-jp で出力されていると思うので、
mbstring.encoding_translation = Off
として無効にするほうが良いと思われます。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.23%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
2015/08/05 11:29 編集
movabletype4がこの設定で動作しているのですが、もしphp.iniを直せるとした場合に影響が出るのか出ないのかわからず、手を出せておりません。
2015/08/05 11:36
2015/08/05 12:56
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');
2015/08/05 13:02
> ini_set('mbstring.http_input', 'pass');
> ini_set('mbstring.encoding_translation', 'Off');
その辺りの設定は `ini_set` ではダメだったと思います。なぜなら、PHP の処理が開始した時点で入力は終わっているからです。
php.ini や .htaccess で設定する必要があります。
2015/08/05 13:12 編集
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エラーが解消できません。
2015/08/05 13:16
とりあえず下記の2つを設定しておけばいいのではないでしょうか。
```
php_flag mbstring.encoding_translation off
php_value mbstring.http_input "pass"
```
それ以外は ini_set でよいと思うので。
2015/08/05 13:19 編集
php_flag mbstring.encoding_translation Off
php_value mbstring.http_input pass
としましたが、まだ500エラーが継続中です。すみません。
2015/08/05 13:26
php_value mbstring.encoding_translation 0
php_value mbstring.http_input "pass"
あと、お使いの PHP は Apache モジュール版ですか? CGI ですか?
2015/08/05 13:32
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エラーのままで。
2015/08/05 13:35
<?php
var_dump(php_sapi_name());
2015/08/05 13:45
とでました。
2015/08/05 13:54
php.ini あるいはレンタルサーバの方で提供されている別の方法で設定してください。
2015/08/05 16:22
元のメールフォーム製作元に問い合わせたところ有償サポートになること、
などのために、一度設置した問い合わせフォームを捨てて、
別のPerl動作メールフォームに入れ替えることで完了としました。
(超絶がっかりですが。)