重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

PHP超初心者です。
前任者が退職し、急きょWEBを引き継ぐことになりました。

現在稼動中のサイトのメールフォームは、PHPで処理を行っているのですが、
フォーム入力後に表示する入力確認画面及び送信メールで、
日本語が文字化けを起こしてしまいます。

PHP内に記述されているのは、

if(phpversion() < "4.1.0"){
$_GET = $HTTP_GET_VARS;
$_POST = $HTTP_POST_VARS;
$_SESSION = $HTTP_SESSION_VARS;
}

なのですが、レンタルサーバーのPHPバージョンは5.2.8です。

言語及び内部エンコーディングは、

mb_language('Japanese');
mb_internal_encoding(UTF-8);

と設定してありますので、文字化けはバージョンの違いによるものではないかと考えているのですが、なにぶん初心者でどのように修正をかければよいのか分かりません。

尚、動作には問題はありません。

初歩的な質問で大変恐縮ですが、どなたかご回答よろしくお願いいたします。
(初心者向けの分かりやすい回答でお願いします)

A 回答 (4件)

補足ありがとうございます。



phpinfoで出てきた値は問題なさそうです。

>>mb_convert_variables($mb_code, 'auto', $mail_adm, $mail_usr);

この関数に関してなんですが、コレは文字コードを変換処理をかける記述なのですが、

もともと、HTMLやPHPプログラムの記述内容をすべて「UTF-8」で統一しているなら、
UTF-8をUTF-8に変換するための記述になっている様に見えます。

また、第二引数の「auto」は、与えられた、第三引数、第四引数の文字コードを自動的に検出する、というようなものなんですが、
これの検出は当てにならないことが多いです。

つきまして、この行を一度コメントアウトしてみていただいてもよろしいですか。

それでも治らない場合、そのプログラム及びHTML等、関連する全部のファイルが、本当にUTF-8になっているかどうか
再度ご確認下さい。

データベースを使っているなら、データベースに保存している文字コードもソレ以外の値になっていないかどうかを確認剃る必要があります。
    • good
    • 0
この回答へのお礼

hogehoge78様、この度の問題、無事解決いたしました!

CPIサーバのデフォルトのPHPの内部文字コードがEUC-JPのため、現在利用しているCPIサーバのPHPの設定ファイルをコピーして、php.iniを作成しました。

そこで、mbstring.internal_encoding をEUC-JPからutf-8へ変更し、mbstring.encoding_translation をOnからOffに変更し、アップロードしたところ文字化けは無事解決いたしました。

この解決に至ったのも、今回hogehoge78様からアドバイスいただいたとおり、コメントアウトしてみたり、プログラムと関連するファイル全ての確認も行ったりしてそれでも変わらず、今一度大元であるサーバーの確認を行った上で調べた結果至りましたので、hogehoge78様の分かりやすく丁寧なアドバイスのおかげだと思っています。

初心者の私に、親身になって対応していただき本当にありがとうございました!感謝いたします!

また何かあったときはよろしくお願いいたします^^;

お礼日時:2011/08/09 11:09

まだ、なんとも言えないところですが、



とりあえず、下記のような記述のPHPファイルをアップロードして開いてみてもらえますか。

<?php

phpinfo();

?>

ファイル名は適当でいいです。
コレをブラウザで見てもらうと、PHPが現状設定されている一欄が取得出来ますが、

このなかの「mbstring」といった項目があると思います。
その中で、
mbstring.encoding_translation等といった記述がされているテーブルがあると思うのですが、
そのテーブルに表示されている設定はどの様になっていますか。
そこの中の右側の値が、「Off」とか、「0」とか「no value」、「pass」以外の値が入っているところはありますか。

また、プログラム中を文字列で検索して、
mb_convert_encoding
という記述はありませんか。

もしあったら、それの引数がどの様な値に成っているか教えて下さい。

この回答への補足

早速のご回答ありがとうございます!

設定一覧取得しました。
「mbstring」という項目は、以下になります。
そのままコピーしましたのでご確認お願いします↓↓↓

Directive Local Value/Master Value
mbstring.detect_order auto/auto
mbstring.encoding_translation On /On
mbstring.func_overload 0 /0
mbstring.http_input auto /auto
mbstring.http_output pass /pass
mbstring.internal_encoding EUC-JP /EUC-JP
mbstring.language Japanese Japanese
mbstring.script_encoding no value /no value
mbstring.strict_detection Off /Off
mbstring.substitute_character no value /no value

こちらを見ると、
mbstring.internal_encoding EUC-JPとなっており、
今現在プログラムとhtmlはUTF-8で設定しているので、
これが原因かと思ってEUC-JPに変更してみたのですが、
文字化けの種類が変わっただけで相変わらず文字化けのままです。

それから、プログラム中(form.php)を文字列で検索したのですが、
mb_convert_encoding
という記述はありませんでした。

mb_convert_variables($mb_code, 'auto', $mail_adm, $mail_usr);
ならありましたが、これは関係ないですよね…
(ちなみに$mb_codeはUTF-8で設定しています)

いかがでしょうか…ご回答お待ちしております。

補足日時:2011/08/04 11:30
    • good
    • 0

PHPのバージョンは文字化けに関係ないのかと思います。



ファイルの文字コード、METAタグの文字コードを確認してみてください。
合っていますか?
phpのheader関数で、文字コードを設定している場合は、それも同じかどうかを確認ですね。

あとは、サーバーのレスポンスヘッダの文字コードも合わせていればいかもです。

この回答への補足

お礼が遅くなり失礼いたしました。

この度はご回答ありがとうございます。

ファイルの文字コードとMETAタグの文字コードは、UTF-8で一致させています。

phpのheader関数では、文字コードは設定していないと思います。

アドバイスいただいている、サーバーのレスポンスヘッダの文字コードとは・・・?

すみません、本当に初心者で分からなくて・・・すみません。

私のような初心者向けに説明をいただくのも申し訳ないので、お手数でしたら、参照URLでも結構ですのでよろしくお願いいたします。

補足日時:2011/08/03 22:28
    • good
    • 0

mq2710さんが書きだした部分は、phpのバージョンが4.1.0以下だった場合、各変数にその値を代入する、


という処理ですので、今回の問題とは全く関係ありません。

まず、そのPHPプログラムがどの様に書かれているかわかりませんのでなんとも言えないのですが・・・

そのプログラム内に記述されている(またはテンプレートファイルとしてどこか別のファイルに記述されている)HTML部分を見て下さい。

そこには、metaタグなどで、titleタグよりも前にcharsetが宣言されておりますか?

もしされていなかったら、
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>metaタグよりも後ろにタイトルタグを書く</title>

こんな雰囲気で、入力フォーム部分、確認画面部分のHTMLのヘッダ部分に、metaタグを挿入し、ブラウザで確認してみてください。

それでも文字化けが起きますか?
文字化けが起きる場合は、
HTML部分に書いてある日本語は文字化けしているのか、フォームに入力された値だけが文字化けしているのか、そういった情報を明記して下さい。
また、ご利用のレンタルサーバの名前も教えて下さい(サーバ固有の問題とかも可能性として有ります。)

この回答への補足

返事が遅くなり大変失礼いたしました。

ご回答ありがとうございます!

プログラム内(form.php)にはhtmlの記述はありませんが、メールフォーム内(form.html)には、titleタグよりも前にcharset宣言しています。

また、文字化けを起こしているのは、フォームに入力された値だけです。

ちなみに、サーバーはCPIレンタルサーバーです。

引き続き情報不足でしたらご指南ください。

よろしくお願いいたします。

補足日時:2011/08/03 22:06
    • good
    • 0

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