• ベストアンサー

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

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