• 締切済み

PHPにてメールフォームで文字化け

今、会社のHP用でメールフォームをphpで作成しています。 「入力」→「確認」→「送信」 でsession関数を使って作成しているのですが確認画面で文字化けしてしまい、送られてくるメールも文字化けしてしまい困っています。 エンコードの間違い?と思って mb_language("ja"); mb_internal_encoding("SJIS"); でやっているのですがこれだけではいけないのでしょうか? 個人で借りているサーバーで試したところうまくいったのですが、会社の借りているサーバーだと文字化けしてしまう状態です。 ちなみに個人で借りているのはロリポップで 会社のサーバーはphp4まで対応しています。 わかりにくい質問ですがよろしくお願いします。

  • PHP
  • 回答数3
  • ありがとう数0

みんなの回答

回答No.3

的外れの回答かもしれませんが、その際はご容赦ください。 会社の借りているサーバーが特定のエンコード(UTF-8など)を指定している場合は、それに従わねばなりません。 また、ファイルの保存もそのエンコードでおこなう必要があります。

  • kozaiku
  • ベストアンサー率41% (256/616)
回答No.2

私の少ない経験からですが、 アップロード先サーバによって文字化けの違いが出る場合、PHPファイルがサーバー上にある状態での文字コードの違いが考えられます。 ローカルPCからPHPファイルをアップロードする際にエンコードが変わってしまっているのかもしれません。 FTPソフトによってはホスト側の保存エンコードを明示的に指定できるものもあります(NextFTP)。shift-jisで作成し、shift-jisでアップロードするといった具合に徹底したら文字化けは解消しました。 あくまで経験談ですが・・・

回答No.1

メールフォームの際のエンコードは以下について整理する必要があります。 1. スクリプト記載エンコード  エディタで編集する時のエンコードです。LinuxではEUC-JP、WindowsではSJIS等が一般的になっているのではないかと思います。IEでは比較的影響を受けやすい気がします。 2. 出力エンコード  文字出力時のエンコードです。HTML記載時のメタタグ等に指定します。mb_http_outputで検出/指定が可能です。 3. 内部エンコード  内部での文字エンコードです。これはmb_internal_encodingで指定可能です。  4. 外部からのPOST(あるいはGET)文字エンコード  通常は指定しなくても大丈夫だと思いますが、文字化けする時はきちっと指定した方がいいと思います。mb_http_inputで検出可能です。 文字化けする場合は、mb_language("ja");やmb_internal_encoding("SJIS");だけでなく、上記をきちっと設定すれば解決します。確認画面で文字化け、と言う事はメール送信以前の入力時点でうまく言ってないと思います。

関連するQ&A

  • 携帯 メールフォーム文字化け

    現在携帯のメールフォームを作成しています。 しかし、半角カナで入力した内容が届いたメールでは???と文字化けをしています。 対処の仕方を教えてください。 なお、 if (!mb_check_encoding($var, 'SJIS')) {・・・} ・ ・ ・ ・ mb_language('ja'); mb_internal_encoding('SJIS'); と記述しています。 なにをのせておけばいいのかわからないため、こちらだけにしておきました。 ぜひよろしくお願いします。

    • ベストアンサー
    • PHP
  • PHPのメールフォーム文字化けについて

    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); と設定してありますので、文字化けはバージョンの違いによるものではないかと考えているのですが、なにぶん初心者でどのように修正をかければよいのか分かりません。 尚、動作には問題はありません。 初歩的な質問で大変恐縮ですが、どなたかご回答よろしくお願いいたします。 (初心者向けの分かりやすい回答でお願いします)

    • 締切済み
    • PHP
  • phpのフォームで携帯に送ると文字化け

    お世話になります。 PCサイトのフォームから情報を入れて携帯にメールを飛ばすphpを作成しています。 フォームからPCやスマホにメールを飛ばすときは問題なく表示されるのですが、 フォームから携帯(ガラゲー)に飛ばすと文字化けします。 それも件名だけです。 どうすれば文字化けなく表示させることができるでしょうか? 教えてください。 <?php mb_language('ja'); mb_internal_encoding('SJIS'); session_start(); $name=$_SESSION["name"]; $furi=$_SESSION["furi"]; $tel=$_SESSION["tel"]; $email=$_SESSION["email"]; $ren=$_SESSION["ren"]; $ktel=$_SESSION["ktel"]; $fax=$_SESSION["fax"]; $iken=$_SESSION["iken"]; $to=$email; $subject="こんにちは"; $from= "From: "AAAAAA"; $message=<<<MESSAGE Eメールアドレス:{$email} お名前:{$name} 様 フリガナ:{$furi}様 電話番号:{$tel} 携帯電話番号:{$ktel} FAX番号:{$fax} 連絡方法:{$ren} <ご意見、ご要望> {$iken} MESSAGE; $message.=<<<MESSAGE MESSAGE; mail($to , $subject , $message,$from); session_unset(); ?>

    • 締切済み
    • PHP
  • 入力フォームの文字化け

    PHPのショッピングカートを利用させていただいてます 住所を入力後→確認画面を開くと住所欄の一部が文字化けしてしまいます 例えば「能登半島」と入力すると 確認画面では「能\登半島」と出力されるのです 必ず文字を化けを起こすわけではなく 住所によっては文字化けしません 尚、IEではこの症状はなく Firefoxやサファリでこの現象が起きます .htaccessの設定はこんな設定をしています php_value mbstring.language Japanese php_flag mbstring.encoding_translation On php_value mbstring.script_encoding SJIS php_value mbstring.internal_encoding SJIS

    • 締切済み
    • PHP
  • PHP フォームからのデータが文字化け

    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 です。 アドバイスお願いいたします。

    • ベストアンサー
    • PHP
  • PHP 機種依存文字化け mb_send_mail

    お世話になります。 PHP初心者です。 メール送信時に機種依存文字(﨑髙濵など)の文字化けを解消したいと考えております。 状況を以下に記載します。 ○お問い合せページを作成 1.入力ページ(metaタグの charset=shift_jis) 2.確認ページ(metaタグの charset=shift_jis) 3.終了ページ(metaタグの charset=shift_jis) ○終了ページ(コード抜粋) mb_language("Japanese"); mb_internal_encoding("SJIS"); $ret = mb_send_mail($to1,$subject,$body1,$header); 上記の場合、文字化け(?)になります。 終了ページのキャラセットをUTF-8に変更し、 mb_language("uni"); mb_internal_encoding("UTF-8"); $ret = mb_send_mail($to1,$subject,$body1,$header); とすると、確認ページから渡ってきたセッションの値が文字化けしていて、 その値をmb_convert_encodingでコンバートしても文字化けしてしまいます。 全ページのキャラセットをUTF-8に変更すれば、問題なく受渡しできて、文字化けにならずにメール送信ができますでしょうか。 又、できれば入力ページと確認ページのキャラセット等を変えずに、終了ページのコード変更だけで解決するにはどうすれば宜しいでしょうか。 宜しくお願い申し上げます。

    • 締切済み
    • PHP
  • phpのmb_convert_encodingで文字化け

    phpのmb_convert_encodingで文字化け phpでmb_convert_encodingを使用してSJISよりUTF-8にエンコーディングしています。 ところが、“(”や“?”などが1文字目に存在すると文字化けしてしまいます。 どのような原因が考えられますでしょうか? お願いいたします。

    • ベストアンサー
    • PHP
  • phpとMysqlの文字化け

    何度もすみません。 phpからinsertするときとphpmyadminから直接挿入するときどちらも文字化けを起こします。 phpは4.4.9でmysqlは5です。 myadminのMySQL 接続の照合順序はsjisにしております。 照合順序と保存される文字コードは違うのでしょうか。 phpファイルはsjisで保存しています。 過去の質問を見たり、調べてset name sjisとset name ujisと mb_convert_encoding($str, "EUC-JP", "SJIS");を それぞれ試しましたが文字化けのままです。 mb_convert_encoding($str, "utf-8", "SJIS"); であいうえおと入力してみたところあい???となりました。 また、adminから直接挿入した時、同じくあいうえおと入力しましたが、 こちらもあい???となりました。 adminの設定はutf-8ということのでしょうか。 照会順序以外文字コードについて表示されているところがわからなかったのですが、 どこで確認できますでしょうか。 また、php、adminともどこの設定を確認すれば良いのでしょうか? 恐れ入りますが教えていただけますでしょうか。

    • ベストアンサー
    • PHP
  • PHPメールフォームでの文字化け

    プログラミング&PHP超初心者です。 PHPでメールフォームを作成して、送信には成功しましたが、受信したメールが文字化けしています。 いろいろ調べたのですが、解決できませんでした。 どなたか詳しいかた、教えていただけると嬉しいです。 送信する部分: if ($name != \"\" and $from != \"\" and $title != \"\" and $naiyou != \"\" ) { if (mb_send_mail($to, $title, $naiyou, \"From:$from\")) { echo \"メールを送信しました\"; } else { echo \"メール送信失敗です\"; } 文字コードはEUC-JPです。 サーバーはロリポップです。 よろしくお願いいたします。

    • 締切済み
    • PHP
  • PHP関数mb_send_mailで送信すると件名が文字化けしてしまいます。

    PHP関数mb_send_mailでメールの送信しているのですが、件名だけが文字化けしてしまいます。 Windows2000Server+IIS ■PHPソース mb_send_mail($strMail,mb_convert_encoding("あいうえお","JIS","auto"),mb_convert_encoding("かきくけこ","JIS","auto"),$header); ■PHP.INI設定 extension=php_mbstring.dll SMTP = localhost smtp_port = 25 sendmail_from = sample@sample.jp mbstring.language = Japanese mbstring.internal_encoding = EUC-JP mbstring.http_input = auto mbstring.http_output = SJIS mbstring.encoding_translation = On mbstring.detect_order = auto mbstring.substitute_character = none; ■文字化けするSubject Subject: =?US-ASCII?B?GyRCJCIkJCQmJCgkKhsoQg==?= このPHPソースを別のレンタルサーバにいれ、送信すると文字化けせずに届きます。 なぜか、受信メールの文字コードがUS-ASCIIになっています。どうすればいいのでしょう? 誰かたすけてくださいーー