スレッド表示 | フラット表示〕 全トピック 920 件中 281 番目 次≫ ≪前

メール送信で改行以下が消える

created: 2006-02-06 14:07 | modified: 2006-02-07 19:25 | reply: 7

[2908] メール送信で改行以下が消える

user: 江戸川 | created: 2006-02-06 14:07
フォームからメールを送信したいのですが、改行した以降の文章が消えてしまいます。
具体的には次のような手順を踏んでいます。

?フォームのtextareaから文章を記入、そのとき改行。POST送信。

?内容チェックページ:mb_convert_encodingでSJISに変換。さらにhtmlspecialcharsをかけて表示。このとき改行はキャンセルされ、一行の続いた文章になる。OKならPOST送信。

?POSTされた文章をmb_send_mailの本文として送信。(mb_language("ja");で設定)

そして、送られてきたメールを見ると、文章の最初の行だけが表示され、それ以降の行は消えてありません。文章の長さは関係なく、2行目以降が全く表示されません。
メールソフトはOEとNCで、どちらも同じ結果でした。

何処を間違えているのでしょうか・・・・?
reply: 2910 返信 編集 削除

[2910] Re. メール送信で改行以下が消える

user: ゆうじ | created: 2006-02-06 19:52
こんばんわ。

処理の流れには問題ないようにおもわれますが、
いくつかの処理があるときは切り分けしましょう。

まずは、mb_send_mail で送信する前に
本文をprintしてみればその前後で原因が分けられます。

一番怪しいのは(3)ですが
コードを見てみないとなんとも判断できません。
Parent: 2908  reply: 2911 2913 返信 編集 削除

[2911] 怪しい?

user: 江戸川 | created: 2006-02-06 21:20
アドバイスありがとうございます。
怪しい手順?のスクリプトを下記します。

<?php
mb_language("ja");
mb_internal_encoding("EUC-JP");

$address2 = "baba@aaa.co.jp";//自分宛
$message2 = $name ."\n" . $address . "\n" . $sub . "\n" . $que;
$title2 = mb_encode_mimeheader(mb_convert_encoding("お客さんから問い合わせだよ",'EUC-JP','SJIS'));
$from2 = "From: postmaster@aaa.com";

if (@mb_send_mail($address2,$title2,$message2,$from2))
{echo "ありがとうございました。お問い合わせを受付しました。";
echo "内容[" . $message2 . "]";}//書き出し
else
{echo "送信に失敗しました。恐れ入りますがもう一度最初からご記入ください。";}
?>

メッセージ本文($message2)を書き出してみたら、2行目以降がありませんでした。と言うことは?が怪しいのか・・・?
Parent: 2910  reply: 2912 返信 編集 削除

[2912] 怪しい?

user: 江戸川 | created: 2006-02-06 21:24
順序が逆になりますが、手順?のスクリプトです。

<?php
echo "<P>下記の通りでよろしいですか?修正する場合はブラウザの「戻る」ボタンで戻ってください。</P>";

$name = mb_convert_encoding($_POST['name'],'SJIS','EUC-JP');
$mail = $_POST['mail'];
$title = mb_convert_encoding($_POST['title'],'SJIS','EUC-JP');
$que = mb_convert_encoding($_POST['question'],'SJIS','EUC-JP');

echo '
<table cellpadding="3" bgcolor="#CCCCCC" width="650">
<tr bgcolor="ffffff">
<td align="right" width="120">お名前 :</td>
<td>' . htmlspecialchars($name) .'</td>
</tr>
<tr bgcolor="ffffff">
<td align="right" width="120">e-mail :</td>
<td>' . htmlspecialchars($mail) .'</td>
</tr>
<tr bgcolor="ffffff">
<td align="right" width="120">件名 :</td>
<td>' . htmlspecialchars($title) .'</td>
</tr>
<tr bgcolor="ffffff">
<td align="right" width="120">お問い合わせ内容 :</td>
<td>' . htmlspecialchars($que) .'</td>
</tr>
</table>';
?>

<form name="question" action="imputq.php" method='POST'>
<input name="name" type="hidden" value=<?=$name?> />
<input name="mail" type="hidden" value=<?=$mail?> />
<input name="title" type="hidden" value=<?=$title?> />
<input name="que" type="hidden" value=<?=$que?> />
<input type="submit" name="submit" value="上記の内容で確定する"/>
</form>

あれ?ここでは特に何も変なことしてないようですが。
Parent: 2911  返信 編集 削除

[2913] チェック位置

user: ゆうじ | created: 2006-02-06 21:58
とこで改行以降が消えたのか探すわけですから
スクリプト(3)で確かめる位置は次の箇所です。

1)$message2 の初期化直後に var_dump($message2)
2)スクリプトの冒頭で var_dump($_POST)

変数の中身を確かめる時は、
echo や print ではなく、var_dump() が良いです。
よく exit と組み合わせて使うデバッグ手法です。

var_dump($_POST);
exit();

あと、スクリプト(2)は問題なさそうですね。
Parent: 2910  reply: 2914 返信 編集 削除

[2914] var_dump

user: 江戸川 | created: 2006-02-07 10:26
なるほど、チェック位置はそうですね。

そこで、スクリプト?の冒頭で var_dump($_POST['que'])を入れてみたら、なんとこの時点で2行目以降が消えていました。

一応スクリプト?に戻って、$que(本文)の定義直後に var_dump($que);で出力したら、2行目以降もちゃんとありました。(ただし、改行ではなくスペース区切りで)

と言うことは、?から?のPOST時に消えたと言うことでしょうか・・・?
(スペース以降は消える設定??)
Parent: 2913  reply: 2915 返信 編集 削除

[2915] ダブルクォーテーション

user: ゆうじ | created: 2006-02-07 17:24
スクリプト(2)のフォームですが、

スクリプト(2)が出力したHTMLソースを
確かめてみてください。

良く見るとPHPタグの両端に
ダブルクォーテーションが無いので
空白以降が無視されてるのでは。

こうすれば治るかな。
<input name="que" type="hidden" value="<?=$que?>" />
Parent: 2914  reply: 2919 返信 編集 削除

[2919] 治りました!

user: 江戸川 | created: 2006-02-07 19:25
またもや、ありがとうございます。

おっしゃるとおり、ダブルクォーテーションをつけたら治りました。2行目以降も表示されるようになりました。

しかし考えてみたら、今までダブルクォーテーションもシングルクォーテーション無しで、よく送信できたなと。(改行は無視されるにしても)

他のスクリプトでも忘れてると思うので、後でチェックします。
Parent: 2915  返信 編集 削除
スレッド表示 | フラット表示〕 全トピック 920 件中 281 番目 次≫ ≪前
ページの一番上へ
Googleグックマークに登録 Yahooグックマークに登録 livedoorクリップに登録 @niftyクリップに登録 はてなブックマークに登録 deliciousに登録 Buzzurlに登録 FC2ブックマークに登録
最近更新された掲示板トピックス
管理人Blog
Yahoo Search

最近更新したNote
PHPマニュアル
今日のブックマーク
PHPマニュアル関数検索
関数名を入力し検索ボタンをクリック↑