PHPメールフォームからの機種依存文字送信時の文字化けと改行の問題について

このQ&Aのポイント
  • PHPのメールフォームから機種依存文字を送信すると、文字化けしてしまいます。他の文字は問題ありません。
  • 受信したメールの件名の日本語文字列が改行されてしまいます。
  • PHP(UTF-8)で作成したメールフォームから機種依存文字を送信すると文字化けし、件名が改行されます。どこに問題があるのか教えてください。
回答を見る
  • ベストアンサー

PHPメールフォームから機種依存文字を送信すると、文字化けしてしまう

PHPのメールフォームを作成しましたが、下記2点で悩んでいます。 初心者で申し訳ありませんが、ご教授願いします。 PHP(PHP作成文字コードは「UTF-8」)でメールフォームを作成しました。 --------------------------------------- mb_language("Ja"); mb_internal_encoding("UTF-8"); $header = "From:" .mb_encode_mimeheader($guestName) ."<" .$guestEmail .">"; $mailto = "test@xxx.com"; $subject = "ご連絡ありがとうございます。"; $boRtn=mb_send_mail($mailto,$subject,$content.$content_guest,$header); --------------------------------------- (1)送信した結果、機種依存文字が化けてしまいました。 機種依存以外の文字は文字化けしません。 送信した機種依存文字は「ローマ数字やまるいちなど」 (2)また受信したメールのヘッダー部分を表示したら、 件名の日本語文字列が3行くらいに改行されてしまいます。 上記の現象(特に機種依存文字の送信)について、 記述ミスや足りない点など教えて下さい。 宜しくお願いいたします。

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

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

Googleにて、「mb_send_mail 機種依存文字」あたりで検索した結果、 http://moshit.blog37.fc2.com/blog-entry-12.html 上記情報が引っかかりました。 mb_send_mailでは機種依存文字が正常に送れないため、mail関数を使う、といった内容です。 直、最近では、 http://hal456.net/qdmail/ qdmailという、MITライセンスのライブラリが公開されておりますので、こちらのライブラリを使用してみるのも良いかもしれません。

関連するQ&A

  • メールフォームの件名が文字化けします

    PHPでメールフォームを作っていて、以前のサーバーではエラーも無く動いていたのですが、新しいサーバーでは件名がどうしても文字化けしてしまいます。(※本文も化けていましたが解決しました) 色々調べて色々試してみたのですが上手く動作せず・・・ 以下にPHPの必要と思われる部分を書いておきますので、ご解答の程よろしくお願いいたします。 ちなみにPHPのバージョンは4.4.2です。 <?php header("Content-Type:text/html;charset=Shift_JIS"); ?> <?php $mailto = "aaa@bbb.ccc" $subject = "フォームからのメール"; ~各種設定・エラーチェック等省略~ $body=mb_convert_encoding($body,"Shift_JIS","ASCII.JIS,UTF-8,EUC-JP,SJIS"); $subject=mb_encode_mimeheader($subject,"ISO-2022-JP"); if($from_add == 1) { $from = $_POST['E-mail1']; $header="From: $from\nReply-To: ".$_POST['E-mail1']."\nContent-Type: text/plain;charset=iso-2022-jp\nX-Mailer: PHP/".phpversion(); } else { $header="Reply-To: ".$_POST['E-mail1']."\nContent-Type: text/plain;charset=iso-2022-jp\nX-Mailer: PHP/".phpversion(); } if($mailcheck == 0 || $sendchk == 1) { mb_send_mail($mailto,$subject,$body,$header); if($remail == 1) { mb_send_mail($reto,$resubject,$rebody,$reheader); } } else { htmlHeader(); ?> ~送信確認画面レイアウト・その他処理省略~ <?php } ?>

    • ベストアンサー
    • PHP
  • phpのmb_send_mailで携帯のみ文字化け

    PHPのmb_send_mail関数でメールを送信しています。 メールサーバーはGoogleAppsのを使っています PHPのバージョンは5.1.6 --- 下記ソース --- //日本語と内部文字エンコードの指定 mb_language('ja'); mb_internal_encoding('UTF-8'); $parameter = "-f hoge@example.co.jp";//return_path設定 // ↓コレだと携帯では文字化けしないが、Gmailへ送信すると文字化け //$subject = mb_encode_mimeheader(mb_convert_encoding($subject,"JIS","UTF-8")); $header = ""; $header .= "From: {$subject}<{$from}>"; $message = str_replace("\r", "", $message); $res = mb_send_mail($to, $subject, $message, $header, $parameter);

    • ベストアンサー
    • PHP
  • 自作メールフォームから送信するとメール内容がおかしくなる。

    ※PHP初心者なので、お手柔らかにお願いします。 自作メールフォームからメール送信すると、メールは送れるのですがメールの内容がおかしくなります。 現状は、件名のみ正しく表示され、差出人と本文の内容が空になります。 いろいろなサイトを見て試してみたのですが、どれも同じ結果で何が間違っているのかよくわからず困ってます。 メールの設定として下記を、 mb_language("Japanese"); mb_internal_encoding ("SJIS"); mb_detect_order("ASCII, JIS, UTF-8, EUC-JP, SJIS"); $MailTo = "送付先メールアドレス"; メール送信事態は下記ソースの通りです。 // エンコードして文字列を作成 $Name = mb_convert_encoding($Name, 'JIS', 'auto'); $Header = "From:" .mb_encode_mimeheader($Name). "<" .$Mail. ">\n"; $Subject = "=?iso-2022-jp?B?".base64_encode(mb_convert_encoding("お問い合わせ", 'JIS', 'auto')). "?="; $Message = mb_convert_encoding($Message, "JIS", "auto"); // メール送信処理 $Ret = mb_send_mail($MailTo, $Subject, $Message, $Header);

    • ベストアンサー
    • 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
  • Gmailへのメール送信で文字化け

    PHPでフォームメールの作っているのですが、Gmailで送信したメールを受け取ると□□□□□というように文字化けが起こっていまいます。 アウトルック、ホットメールなどは大丈夫なのですが、グーグルのGmailだけ駄目なようです。なぜ文字化けするのでしょうか? mb_language("Ja"); $header = "From: reminder@aaa.com\r\n"; $header .= "MIME-Version: 1.0\r\n"; $header .= "Content-Type: text/plain;charset=ISO-2022-JP\r\n"; $header .= "Content-Transfer-Encoding: base64"; $to = "aaa@gmail.com"; $subject = "送信テスト"; $body = "本文テスト本文テスト"; $subject = base64_encode($subject); $subject = mb_convert_encoding($subject,"ISO-2022-JP"); $subject = "=?ISO-2022-JP?B?" . $subject . "=?="; $body = base64_encode($body); $body = mb_convert_encoding($body,"ISO-2022-JP"); $success = @mail($to,$subject,$body,$header); if($success) print "成功"; else print "失敗";

    • ベストアンサー
    • PHP
  • 機種依存文字が?になる

    HTML_QuickFormを利用してフォーム送信しているのですが 受信したメールを見ると特定の文字が?になってしまい 文字化けをしてしまいます。 具体的にはメールで確認した際に<input type="text" ・・・>に 入力した半角カタカナと機種依存文字が?に変わっておりました。 php,tplファイルは全てutf-8で保存されphpのソースは以下のようになっております。 header('Content-Type: text/html; charset=utf-8'); mb_language('Japanese'); mb_http_input('UTF-8'); mb_http_output('UTF-8'); mb_internal_encoding('UTF-8'); require_once 'HTML/QuickForm.php'; require_once 'HTML/QuickForm/Renderer/ArraySmarty.php'; require_once 'Smarty/Smarty.class.php'; $to = 'mail@ad.com'; $form = new HTML_QuickForm('inq', 'post'); $form->addElement('text', 'name', '名前', array('class' => text)); $form->addElement('text', 'ad', '住所', array('class' => text)); $form->addElement('textarea', 'msg', 'コメント', array('rows' => 8, 'cols' => 30)); $value = $form->getSubmitValues(); if (isset($value['accept'])) { $subject = '連絡'; $message = <<<EOD 【名前】 {$value['name']} 【住所】 {$value['ad']} 【メッセージ】 {$value['msg']} 【メッセージ】 {$value['msg']} EOD; mb_send_mail($to, $subject, $message, "From: {$value['連絡']}"); $form->freeze(); ~略~ 半角カタカナの件は $message = mb_convert_kana ($message, 'K'); とし解決したのですが機種依存文字の解決策が見つからず自分なりに なんとか調べてみたところ下記のurlがみつかりました。 http://shimax.cocolog-nifty.com/search/2007/12/phpeucjputf8_f714.html utf-8では機種依存文字が?になるのは当たり前のことなのですね。 これを応用しなんとかできるかと思い下記のようにしてみたのですが 結果は同じでした・・・ $message = mb_convert_encoding(mb_convert_encoding($message,"sjis-win","UTF-8"),"UTF-8","sjis-win"); どのようにすれば解決できるものなのでしょうか? 宜しくお願い致します。

    • 締切済み
    • PHP
  • PHPメールフォームでの文字化けに苦しんでいます。

    レンタルサーバー(ファーストサーバ)でPHPのメールフォームを作っています。 PHPフォームから出力される送信確認画面と、送られるメールで特定の文字が (例えば「契」が「啓」に)化けてしまいます。 色々調べて出来る対策はしたのですが一向に分かりません。 どうやれば文字化けが直るか具体的に教えてください。 文字化け対策用に.htaccessをディレクトリに入れています。 .htaccessの中身 php_flag mbstring.encoding_translation off php_value default_charset "Shift_JIS" PHPフォームのメイン処理部分です。 <?php header("Content-Type: text/html;charset=Shift_JIS"); ~~~省略~~~ $body=mb_convert_encoding($body,"Shift_JIS","ASCII.JIS,UTF-8,EUC-JP,SJIS"); $subject="=?iso-2022-jp?B?".base64_encode(mb_convert_encoding($resubject,"Shift_JIS","ASCII.JIS,UTF-8,EUC-JP,SJIS"))."?="; if($from_add == 1) { $from = $_POST['E-mail']; $header="From: $from\nReply-To: ".$_POST['E-mail']."\nContent-Type: text/plain;charset=iso-2022-jp\nX-Mailer: PHP/".phpversion(); } else { $header="Reply-To: ".$_POST['E-mail']."\nContent-Type: text/plain;charset=iso-2022-jp\nX-Mailer: PHP/".phpversion(); } mail($mailto,$subject,$body,$header); else { htmlHeader(); ?> <!-- 送信確認 --> 間違いがなければ送信ボタンを押してください。<br><br> <form action="form.php" method="POST"> <? echo $err_message; ?> <table width="500" bgcolor="#cccccc" cellspacing="1" cellpadding="3"> <?php foreach($_POST as $key=>$var) { if(get_magic_quotes_gpc()) $var = stripslashes($var); $var = htmlspecialchars($var); print("<tr bgcolor=#ffffff><td bgcolor=#eeeeee width="."125"." ><small><div style = line-height:0.5>".$key."</small></td><td><small>".$var); ?> <input type="hidden" name="<?= $key ?>" value="<?= $var ?>"> <?php print("</div></small></td></tr>\n");}?> ~~~後処理省略~~~ よろしくお願いします。

    • 締切済み
    • PHP
  • phpからのメール送信が文字化け

    phpでメールを送信できるようなりましたが、メールは無事に送信されるのですが、OutLookで受信すると文字化けしてしまいます。色々調べたんですがどうも解決できません。 phpのtextエディターはUTF-8設定にして記入しました。メールソフト(OutLook)受信のエンコードは色々試したのですが、文字化けしてしまいます。 どのように文字設定をすると文字化けしないのでしょうか。 「テスト」と言う文字を送信すると「eXg」となり表示されます。 よろしくご指導お願いいたします。 <?php $mailto="*******@yahoo.co.jp"; $mailsbj="テスト"; $mailbody="テスト"; $mailheader="From:*******@***.biglobe.ne.jp\nReply-To:*******@yahoo.co.jp\nX-Mailer:PHP/".phpversion(); mb_language("ja"); mb_internal_encoding("UTF-8"); ?>

    • ベストアンサー
    • PHP
  • メールを受信で文字化け

    phpでメール送信フォームを作成しています。 ローカルでは上手くいきますが、レンタルサーバーでは受信メールが文字化けをしてしまいます。 いろいろ試しましたが、さっぱりわかりません。 どなたか助けて下さい。 サイトはUTF-8を使用しています。 input用ファイルから下記のsend用ファイルにactionしています。 Content-Typeの指定方法がよくないのでしょうか? <?php ini_set('SMTP','mail.glbl-srv.net'); ini_set('smtp_port','587'); $ini = parse_ini_file('mail.ini'); $headers = <<<HEAD From: {$_POST['from']} Return-Path: {$_POST['from']} //Content-Type: text/html/plain;charset=ISO-2022-JP Content-Type: text/html/plain;charset=UTF-8 HEAD; //$body = "■■{$ini['subject']}■■\n\n"; $body = "■■{$_POST['title']}■■\n\n"; foreach ($_POST as $key => $value) { $body .= "[{$key}] {$value}\n"; } mb_send_mail($ini['mailto'], $ini['subject'].'('.$_POST['title'].')', $body, $headers); //mail($ini['mailto'], $ini['subject'].'('.$_POST['title'].')', $body, $headers); header("Location: ".$ini['dist']); ?>

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

    フォームメール送信の文字化けについてお教え下さい。 よろしくお願い致します。 まずは環境より申し上げます。 環境 xampp-win32-1.7.7-VC9 同封 apache2.2.21 php5.3.8 perl 同封されているもの -----------------------------  xmailサーバーも動いています。 内部、外部、外部から外部、ともに正常に送受信できています。 以前はANHTTPDとperlとsendまね~るで問題なく動いていましたが このたびPHPが必要になりましたので以前のperlをアンインストールしてXAMPPをインストールしました。 以前からの自作のメールフォームを設置してメールを送信すると 受付確認メールと問い合わせ報告メールのすべてが文字化けしています。 一応 文字コードはUTF-8で mail.html、 perlプログラム、ともに統一しています。 apacheのhttpd.confの中にはAddDefaultCharset・・・の設定項目がなぜかありませんので apacheについては文字コードの設定などはおこなっておりません。 症状ですが メールフォームに入力して確認ボタンを押すと現れる確認画面は 文字化けしておりません、高崎、申す、表示という文字も化けていません。 このあと送信ボタンを押すと メールは宛先へ正常に届きますが タイトルからすべてが文字化けで読む事はできません。 原因探しが三日くらい続き、気になって寝られません。 ひろいあつめて書いたコードですが、 よろしくお願いいたします。 # MIMEエンコード $mail_to = mimeencode($MAILTO); $mail_from = mimeencode($FORM{'name'}); $mail_subject = mimeencode($FORM{'subject'}); # 文字コードの変換 $body = jcode::jis($user_owner); # メールヘッダーの生成 $header = <<END; To: $mail_to From: $mail_from<$FORM{'email'}> Subject: $mail_subject Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-2022-JP # サーバー出力 print <<END; Content-type: text/html; charset=utf-8 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> # メールの送信 open(MAIL, "| $SENDMAIL -i -t -f $FORM{'email'}") or die("エラー:sendmailへのパイプが開けません"); print MAIL $header, $body; close MAIL; 部分的で分かりにくいかもしれませんが どなたか どうぞよろしくお願いいたします。

    • ベストアンサー
    • Perl

専門家に質問してみよう