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

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

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

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

Q&A

解決済

2回答

2191閲覧

【PHP】問い合わせフォームの本文内容が改行されない

ema-material

総合スコア29

PHP

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

0グッド

0クリップ

投稿2022/03/19 09:09

おせわになっております。

表題の件で質問させてください。

テンプレート等をつかわずPHPの手打ちで問い合わせフォームを制作しております。
完成はしているのですが、
フォームからの連絡メールの本文が改行されず、
すべて一行に長々と記載されてしまい困っています。

解決策をご教示いただけますと助かります。

どうぞよろしくおねがいします。

##form.php##

<?php #送信先メールアドレス $mailto = "●●●@gmail.com"; #送信後画面からの戻り先 $toppage = "/"; #入力情報の受け取りと加工 $name = $_POST["name"]; $email = $_POST["email"]; $message = $_POST["message"]; #無効化 $name = htmlentities($name,ENT_QUOTES,"UTF-8"); $email = htmlentities($email,ENT_QUOTES,"UTF-8"); $message = htmlentities($message,ENT_QUOTES,"UTF-8"); #改行処理 $name = str_replace("\r\n", "", $name); $email = str_replace("\r\n","",$email); $message = str_replace("\r\n","\t",$message); $message = str_replace("\r","\t",$message); $message = str_replace("\n","\t",$message); #入力不備チェック if ($name == ""){ error("名前が未入力です:No name entered");} if (!preg_match("/\w+@\w+/",$email)){ error("メールアドレスが不正です:Invalid email address");} if ($message == ""){ error("メッセージが未入力です:message is missing");} #分岐チェック※要確認 if ($_POST["mode"] == "post"){conf_form();} else if ($_POST["mode"] == "send"){ send_form();} #確認画面 function conf_form(){ global $name; global $email; global $message; #テンプレート読み込み $conf = fopen("tmpl/confirm.tmpl","r") or die; $size = filesize("tmpl/confirm.tmpl"); $data = fread($conf,$size); fclose($conf); #文字置き換え $data = str_replace("!name!",$name, $data); $data = str_replace("!email!", $email, $data); $data = str_replace("!message!", $message, $data); echo $data; exit; } #エラー画面 function error($msg){ $error = fopen("tmpl/error.tmpl","r"); $size = filesize("tmpl/error.tmpl"); $data = fread($error, $size); fclose($error); #文字置き換え $data = str_replace("!errormessage!", $msg, $data); #表示 echo $data; exit; } #CSV書込 function send_form(){ global $name; global $email; global $comment; $user_input = array($name,$email,$comment); mb_convert_variables("SJIS","UTF-8",$user_input); $fh = fopen("user.csv","a"); flock($fh,LOCK_EX); fputcsv($fh, $user_input); flock($fh,LOCK_UN); fclose($fh); send_mail(); # テンプレート読み込み $conf = fopen("tmpl/send.tmpl","r") or die; $size = filesize("tmpl/send.tmpl"); $data = fread($conf , $size); fclose($conf); #文字置き換え global $toppage; $data = str_replace("!top!", $toppage, $data); #表示 echo $data; exit; } #メール送信 function send_mail(){ #時間とIPアドレスの取得 $date = date("Y/m/d H:i:s"); $ip =getenv("REMOTE_ADDR"); global $name; global $email; global $message; #本文 $body = <<< _FORM_ The following contact was made from the hirokoyamauchi portfolio site|ポートフォリオサイトから以下の連絡がありました date|日時: $date IP information|IP情報: $ip Your name|お名前: $name Your mail address|メールアドレス: $email Message|メッセージ: $message _FORM_; #管理者(4行目のメールアドレス)に送信 global $mailto; mb_language("japanese"); mb_internal_encoding("UTF-8"); $name_sendonly = "ポートフォリオメール"; $name_sendonly = mb_encode_mimeheader($name_sendonly); $mail_sendonly ="hirokoyamauchi@gmail.com"; $mailform = "From:".$name_sendonly."<".$mail_sendonly.">"; $subject = "ポートフォリオメールフォームから連絡がありました"; $result = mb_send_mail($mailto,$subject,$body,$mailform); #入力したユーザーに自動返信メールを送信 global $mail; mb_language("japanese"); mb_internal_encoding("UTF-8"); $name_sendonly = "from Hirokoyamauchi portfolio mailform"; $name_sendonly = mb_encode_mimeheader($name_sendonly); $mail_sendonly ="hirokoyamauchi@gmail.com"; $mailform = "From:".$name_sendonly."<".$mail_sendonly.">"; $subject = "Thank you for your inquiry|お問い合わせありがとうございました"; $result = mb_send_mail($email,$subject,$body,$mailform); }

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

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

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

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

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

m.ts10806

2022/03/19 09:16

自身で削除されてるようですが・・ #改行処理 $name = str_replace("\r\n", "", $name); $email = str_replace("\r\n","",$email); $message = str_replace("\r\n","\t",$message); $message = str_replace("\r","\t",$message); $message = str_replace("\n","\t",$message);
m.ts10806

2022/03/19 09:50

削除と言うか、改行コード→タブコードへの変換ですね。
ema-material

2022/03/25 10:45

回答ありがとうございます。 確認が遅くなりましてすいませんでした。 たしかに今の状態だとタブになります。 $message = str_replace("\r\n","\t",$message); $message = str_replace("\r","\t",$message); $message = str_replace("\n","\t",$message); を nameやemailのように $message = str_replace("\r\n", "", $message); とすれば良いのでしょうか? ご教示いただけますと助かります。
m.ts10806

2022/03/26 02:23

結局どうしたのか分からないのですが、 str_replace("\r\n", "", $message) だと改行コードを空文字に変換してます。 つまり、改行なくなります。
ema-material

2022/03/26 03:34

すいませんでした。 改行は入れたいです。 いまはタブになっているところは改行したく思います。
m.ts10806

2022/03/26 03:46

なるほど、最初のコメントだけで伝わると思って(確認だけで解決すると思って) 回答を控えていましたが、気づきを得るには至らなかったようですね。 機能を勘違いされているという前提で回答しましたので、ご確認を。
guest

回答2

0

機能確認はPHPマニュアルでしましょう。

str_replace(
array|string $search,
array|string $replace,
string|array $subject,
int &$count = null
): string|array
この関数は、subject の中の search を全て replace に置換します。

つまり、第3引数内の第1引数の文字列を第2引数に置換します。

php

1<?php 2$a = "1"; 3$b = "a"; 4$c = "12321"; 5 6echo str_replace($a,$b,$c); 7 8//a232a

つまり、提示のコードstr_replace("\r\n","\t",$message);
は$message内の\r\n(改行コード)を"\t"(タブコード)に置換しています。

「タブコードを改行コードに置換したい」のでしたら引数が逆です。

投稿2022/03/26 03:45

m.ts10806

総合スコア80850

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

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

0

自己解決

その後自己解決しましたのでお知らせします。

投稿2023/05/02 00:36

ema-material

総合スコア29

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

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

ema-material

2023/05/06 09:12

申し訳ありません。 かなり時間が経っており、この時の解決方法を覚えていません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問