• ベストアンサー

メール本文の構成 行頭空白

mail('abc@example.com', 'My Subject', $message); 上記の関数(胆略化しています。)で$message部分の構成の仕方に対する質問です。 例: test1 = "あいう"; test10 = "えおか"; test100 = "きくけ"; $message = "これは、テストです。\n"; if ($test1 !== ""){ $message.="TEST1:$test1\n"; } if ($test10 !== ""){ $message.="TEST10:$test10\n"; } if ($test100 !== ""){ $message.="TEST100:$test100\n"; } 上記の例の場合、出力結果は以下のようになります。 <現在の出力結果> これは、テストです。 TEST1:あいう TEST10:えおか TEST100:きくけ この出力結果では行頭(左詰)で全体がそろえられているので、コロン「:」の位置はコロンより左側の文字の数により、ばらばらです。 この出力結果の各行をコロン「:」でそろえるようにするには、どうしたらよいでしょうか? (目指す出力結果をこのスレッドに記載しようとしたのですが、教えてgooでは左側のスペースが省略されてしまいだめでした。) 下記の様に「\s」なども使用してみましたが、うまく行きません。 $message = "これは、テストです。\n"; if ($test1 !== ""){ $message.="\s\sTEST1:$test1\n"; } if ($test10 !== ""){ $message.="\sTEST10:$test10\n"; } if ($test100 !== ""){ $message.="TEST100:$test100\n"; } <うまく行かなかった出力結果> これは、テストです。 \s\sTEST1:あいう \sTEST10:えおか TEST100:きくけ 「\s」が表示されてしまいます。 よろしくお願いします。

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

  • ベストアンサー
  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

等幅フォントでの表示が仮定できるなら、 "TEST1 ;$test" のように半角スペースの挿入でいけるのでは。 でも、必ずしも、相手側が等幅で表示してくれるとは限らない(HTML形式で表として記述する手もありますが。)ので、あんまり気にしない事をおすすめします。

kitty1000
質問者

補足

osamuyさん ご回答ありがとうございました。 私も、当初、下記のようにTESTの前に半角スペースを使用してみましたが、エラーになってしまい、プログラムが実行されませんでした。 うまく行かなかった例(半角スペース挿入) $message = "これは、テストです。\n"; if ($test1 !== ""){ $message.=" TEST1:$test1\n"; } if ($test10 !== ""){ $message.=" TEST10:$test10\n"; } if ($test100 !== ""){ $message.="TEST100:$test100\n"; } 何か他の方法をご存知の方は、おられませんか?

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

回答No.4

んー?特に問題ないはずなんですが・・・。 $messageをechoしたらどうなります? >エラーになりPHPファイルが実行されない ということはエラーメッセージ吐いてますよね。 もしかして、メールの送信でこけたって事でしょうか。

kitty1000
質問者

お礼

yasagure-kunさん ご回答ありがとうございました。 検証した結果、yasagure-kunさんがおっしゃるように半角スペースで文字を揃えることができました(等幅フォントと仮定して)。 PHPのエラーは、別の関係のない箇所で起こっていました。

kitty1000
質問者

補足

yasagure-kunさん ご回答ありがとうございました。 少し時間をかけて自分でコードをいろいろいじってみる必要がありそうです。 数日下さい。 >$messageをechoしたらどうなります? やってみます。お時間下さい。

全文を見る
すると、全ての回答が全文表示されます。
  • tany180sx
  • ベストアンサー率63% (239/379)
回答No.3

目的がちょっと分からないのですが、文字埋めはsprintfが便利かも。 $message = ''; $message .= sprintf('%7s:%s', 'TEST1', 'あいう') . "\n"; $message .= sprintf('%7s:%s', 'TEST10', 'えおか') . "\n"; $message .= sprintf('%7s:%s', 'TEST100', 'きくけ') . "\n"; $message .= sprintf('%-7s:%s', 'TEST1', 'あいう') . "\n"; $message .= sprintf('%-7s:%s', 'TEST10', 'えおか') . "\n"; $message .= sprintf('%-7s:%s', 'TEST100', 'きくけ') . "\n"; echo "<pre>" . $message; // for win // '%-' -> '%#' だったかな

kitty1000
質問者

補足

tany180sxさん ご回答ありがとうございました。 sprintf関数ですか、参考にさせて頂きます。

全文を見る
すると、全ての回答が全文表示されます。
回答No.2

この場合、半角スペースでエラーがでる事はないと思うんですけど・・・。 わたしもスペースで調整してますし。 PHPがなんかエラーはいてません?エラーを書いていただいた方がいいかもです。 とは言いつつ、等幅フォントでないとスペースでの調整は意味がないので、 あまり神経質にならない方がいいのではないでしょうか。

kitty1000
質問者

補足

yasagure-kunさん ご回答ありがとうございました。 例(問題あり) message.=" TEST10:$test10\n"; 上記のように文字列を囲む開始用ダブルクオーテーション「"」の直ぐ後にスペースを挿入した場合にエラーになりPHPファイルが実行されないのですが、そうなりませんか?  例(問題なし) message.="TEST 10:$test10\n"; 開始用ダブルクオーテーション「"」の直ぐ後ではなく、文字と文字の間にスペースを挿入する分には問題ないみたいです。 >PHPがなんかエラーはいてません? 特にこれといって理由が特定できるエラーは、出ていません。 >等幅フォントでないとスペースでの調整は意味がないので 等幅フォントであるという前提で結構です。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • メール本文の組み立て

    mail('abc@example.com', 'My Subject', $message); 上記の関数(胆略化しています。)で$message部分を組み立てる場合についての質問です。 例: test1 = "あいう"; test2 = ""; test3 = "きくけ"; 上記の例の場合、メール本文組み立てコードを下記のようにすると $message = "これは、テストです。\n" TEST1:$test1\r TEST2:$test2\r TEST3:$test3\r"; 以下のように出力されます。 <出力結果> これは、テストです。 TEST1:あいう TEST2: TEST3:きくけ しかし、上記の例の$test2のように入力の値が空欄の場合は、その値の部分だけではなく、タイトル「TEST2:」も表示させたくないのですが、どのように行なえばよいのでしょうか?私の目指す出力結果は以下のようなものです。 <目指す出力結果> これは、テストです。 TEST1:あいう TEST3:きくけ 目指す出力結果を実現するため、以下のようなコードを書きましたが、なかなかうまく行きません。何が悪いかお分かりの方、おられますか? $message = "これは、テストです。\n" if ($test1 != ""){ TEST1:$test1\r; } if ($test2 != ""){ TEST2:$test2\r; } if ($test3 != ""){ TEST3:$test3\r; }"; よろしくお願いします。  

    • ベストアンサー
    • PHP
  • 掲示板からのメールの本文中に件名が表示

    http://genesis.vis.ne.jp/cgi/i/f_board/ ここで配布しているフリースクリプトを設置したのですが 書き込みに対してメールを送ると、メール本文に件名が 表示されていて、本来の件名部分には「無題」と なってしまいます。 以下がメール送信部分だと思うので貼り付けました。 おかしいところがあったら教えてください。 sub sendmail_ { $subject="$FORM{'SYSTEM14'}"; &jcode'convert(*subject, "jis"); #&jcode'convert($SYSTEM[14], "jis"); open (MAIL,"| $SYSTEM[12] -t -f $SYSTEM[13]") || &error("sendmailが使用できませんでした。"); print MAIL "To: $tomail\n"; if ($SYSTEM[9]) { print MAIL "Bcc: $SYSTEM[13]\n"; } print MAIL "From: $frommail\n"; print MAIL "Subject: $subject\n"; print MAIL "Content-Transfer-Encoding: 7bit\n"; print MAIL "Content-Type: text/plain\; charset=\"ISO-2022-JP\"\n\n"; print MAIL "$dateに$fromnameさんから$tonameさんに送信がありました。\n"; print MAIL "+-+-+-+-+-+-+-+\n"; print MAIL "mail: $frommail\n"; print MAIL "+-+-+-+-+-+-+-+\n"; print MAIL "$title\n"; print MAIL "-+-----+-\n"; print MAIL "$message\n"; print MAIL "+-+-+-+-+-+-+-+\n"; if ($SYSTEM[11]) { print MAIL "HOST:$host\n"; print MAIL "IP:$ip\n"; print MAIL "+-+-+-+-+-+-+-+\n"; } print MAIL "$SYSTEM[2]\n"; print MAIL "$SYSTEM[3]\n"; close (MAIL); $_ = ""; }

  • PHPでezweb宛メール

    下記のプログラムでezwebアドレスにメールを送信しようとしてますが、ヘッダ部分に本文が記述され、本文部分は空で送信されてしまいます。 Docomoやvodafoneは正常な動作が確認できました。 本文の文字コードをShift_JISとかにしてみましたが変化はありませんでした。 ご教授願います。 --- // 送信先 $from = "TEST <test@hogehoge.net>"; $to = "test@ezweb.ne.jp"; $rtpath = "test@hogehoge.net"; // Subject $subject = "テスト件名"; $subject = "=?iso-2022-jp?B?" .base64_encode(jcodeconvert($subject,0,3)) ."?="; // メールヘッダ $head = "From: $from \n"; $head .= "Mime-Version: 1.0 \n"; $head = "Content-Type: text/plain; charset=\"ISO-2022-JP\"\n"; $head .= "Content-Transfer-Encoding: 7bit \n"; if($rtpath){ $head .= "Return-Path: $rtpath \n"; } // 本文 $body = "テスト本文 \n"; $body .= "テスト本文 \n"; $body .= "\n"; $body = jcodeconvert($body,0,3); // 送信 mail($to,$subject,$body,$head);

    • 締切済み
    • PHP
  • if文を使用したヒアドキュメントがメール送信できません。

    if文を使用したヒアドキュメントがメール送信できません。 例: $message =<<<END ここは、ヒアドキュメントです END; if($test != ""){ $message .=<<<END ここは、if文を使用したヒアドキュメントです。 END; } 上記の例で、 $message =<<<END ここは、ヒアドキュメントです END; の部分だけならメール送信できるのですが、 if($test != ""){ $message .=<<<END ここは、if文を使用したヒアドキュメントです。 END; } を付加するとメール送信できません。 どこが悪いのでしょうか?

    • 締切済み
    • PHP
  • Perlで行頭にある文字が含まれている行を全部削除して詰めたい

    perl初心者です。以下のようにデータがならんでいる時、 test111 aaaaaaaaabbbbbbbbcccccc test112 aaaaccccabbbbbbbbcccccc test113 aaaaccaaabbbbbbbbcccccc test114 acccaaaaabbbbbbbbcccccc test111 aacaaaaaabbbbbbbbcccccc test112 accaaaaaabbbbbbbbcccccc test113 aaacccaaabbbbbbbbcccccc test114 aaaaaccaabbbbbbbbcccccc test112の行だけ削除して、さらにそこを詰めたい時のスクリプトを作成しています。 途中からわかりません。 行を削除する関数が調べても見つからないのです。 #!/usr/bin/perl ; open(IN, "test.doc") or die ; open(OUT, ">testout.doc"); while(<IN>) { chomp ; if (/(\S+)/) { $name = $1 ; if ($name =~ /^test112(\S+)/) { #ここでマッチさせて、一気に行を削除して、しかも行を詰めたいのですが ; } print OUT " \n" ; } } close (IN) ; close (OUT) ; 大変困っております。宜しくお願いします。

    • ベストアンサー
    • Perl
  • 正規表現の「^」と「$」がうまくいかない

    正規表現の「^」と「$」を使うとうまく働いてくれません。 あるデータの中の、行頭がhttpで始まる1行を取り出したいです。 あるデータ$dataを preg_match_all("/^http(.*?)$/",$data,$result); print_r($result); で出力すると、 ■結果 Array ( [0] => Array ( ) [1] => Array ( ) ) となり、うまくいきません。 preg_match_all("/http(.*?)\n/",$data,$result); やけでこんな感じにやったら、行頭から始まるhttp.....も行頭からはじまらないものもゲットしてすべて出力してくれてしまいます。 行頭から始まるものだけを出力するにはどうしたらいいでしょうか。 php5 UTF-8環境

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

    サーバーを移転してからある特定のソース部分だけ不具合が出ました。 ユーザーがログイン後特定のユーザーにアドレスを公開せずに、メッセージをおくり、その内容がユーザのアドレスに受信するというものなのですが、 その受信するメイルが文字化けしてしまいます。 その他にサイト上からおなじCGIファイルを利用して、管理者などにおくるメイルは正常に機能しています。 ■不具合が出ている部分のソースです。 if (!open(OUT,"| $SENDMAIL -t")) print OUT "Reply-To: $ADMIN\n"; print OUT "Errors-To: $ADMIN\n"; print OUT "To: $MAIL_TO\n"; if ($BCC == 1){ print OUT "Bcc: $ADMIN\n"; } print OUT "From: $ADMIN\n"; &jis("Subject: $SUBJECT"); print OUT "$msg\n"; print OUT "Content-Transfer-Encoding: 7bit\n"; print OUT 'Content-Type: text/plain; charset=iso-2022-jp' . "\n\n"; &jis("$NAME_FROM:$FORM{'MSG'}"); print OUT "$msg\n"; &jis("▽返事はココから"); print OUT "$msg\n"; &jis("$bbs_cgi1?M=H&T=$ID_FROM&I=$ID_TO&PASS=$PASS_TO"); print OUT "$msg\n"; close(OUT); } print "Content-type: text/html\n\n"; print "<html><head><title>$TITLE</title></head><body>■送信完了<HR> $NAME_FROMさんより$NAME_TOさんへメール送信完了しました。<hr>\n"; print "[<a href=$menu_cgi?mode=menu&I=$MYID&PASS=$MYPASS>メニューに戻る</a>]<br>\n"; print "</body></html>\n"; exit; } ■文字化けは aika!' (Basd "&JV;v$O%3%3$+$i (B ような感じです。 かなりいろいろ探してみたのですが、だめなので ここに投稿しました。 わかる方いらっしゃいましたら、どうぞご回答いただければと思います。よろしくお願いします。

    • 締切済み
    • CGI
  • 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
  • CSVファイルを読み込み表示すると行頭がおかしくなります

    ・CSVファイルを読み込み表示すると行頭がおかしくなります。 -【 CSVファイル(test.csv) 】------------------- 1,単一,必須 2,…,… ----------------------------------------- ・例えば上記のCSVを読み込んで、  PHPで表示すると以下のように表示されます。 -【 ブラウザ表示 】-------------------------- 1 P一 K須 2 … ----------------------------------------- ・というように最初の文字が正常に表示されません。 ・ちなみに数字(半角?)はちゃんと表示されました。 ・プログラムは下のような感じになります。 ・どこを編集すればよいでしょうか? -【 PHP 】--------------------------------- <?php  if( $fp = fopen( 'test.csv', 'r' ) ){   $data = fgetcsv( $fp );   while( ( $data = fgetcsv( $fp ) ) !== FALSE ){    echo $data[0] . ' ' . $data[1] . ' ' . $data[2] . '<BR>';   }  } ?> ----------------------------------------- -【 仕様 】--------------------------------- [OS]: CentOS5 [Server]: Apache_2.2.10 [PHP]: PHP_5.2.6 -----------------------------------------

    • ベストアンサー
    • PHP
  • Net_POP3 メール一覧のソート

    Net_POP3を使用してメールの閲覧を作成しています。 現在は日付の古いものから新しいものへと表示されています。 これを日付の新しいものから古いものへと表示をさせたいのですが、sortがうまくできず困っています。 ご存知の方がいらっしゃいましたらご教示お願いします。 ソースは下記になります。 $count = $pop3->numMsg(); if ($count) { $count = $pop3->getListing(); $start = 1; $end = 21; if ($count !== false) { foreach ($count as $key => $value) { if($start < $end) { $overview = $pop3->getParsedHeaders($start); $body = $pop3->getBody($start); $from = mb_decode_mimeheader($overview['From']); $from = mb_convert_encoding($from, "UTF-8", "JIS"); $subject = mb_decode_mimeheader($overview['Subject']); $subject = mb_convert_encoding($subject, "UTF-8", "ISO-2022-JP"); $subject = mb_strimwidth($subject, 0, 42, "...",'UTF8'); $date = mb_decode_mimeheader($overview['Date']); $body = nl2br($body); $maillist .= '<tr>'."\n"; $maillist .= '<td>'.$subject.'</td>'."\n"; $maillist .= '<td>' .$from. '</td>'."\n"; $maillist .= '<td>' .date('Y/m/d H:i:s',strtotime($date)). '</td>'."\n"; $maillist .= '</tr>'."\n"; $start++; } } } } 宜しくお願いします。

    • 締切済み
    • PHP