【?】あるphpスクリプトの疑問


写メールBBSというスクリプトに関して質問があります。
(配布・参照先:http://php.s3.to/bbs/bbs7.php
設置し投稿後、パソコンで確認すると本文の後に

<br><br clear="right"><br>

という改行が入る仕様になっています。
この改行部分はスクリプトのどの部分に当たるのでしょうか?
配布先の掲示板は閉鎖してしまったようで場違いかと思いましたが
お力添えをお願い致します。

回答の条件
  • 1人5回まで
  • 登録:2006/04/10 21:01:00
  • 終了:2006/04/11 17:17:27

ベストアンサー

id:bonlife No.4

回答回数421ベストアンサー獲得回数752006/04/11 07:25:01

ポイント64pt

mail.cgiの本文部分の最後に<br>が2つ含まれていたでしょうか。

取り急ぎ、昨日の回答に誤りがありましたので訂正いたします。

(mail.cgiの本文部分に<br>が含まれている場合には以下の修正で状況が変わる可能性があります。)

      $text = str_replace("/(<br>)+$", "", $text);
    }

ではなく

      $text = preg_replace("/(<br>)+$/", "", $text);
    }

としてみてください。

ご確認よろしくお願いいたします。

id:dsa

出来ました!

お手数かけて申し訳ございません。

本当にありがとうございました。

2006/04/11 17:15:01

その他の回答(3件)

id:ToMmY No.1

ToMmY回答回数656ベストアンサー獲得回数192006/04/10 21:16:56

ポイント1pt

イメージを表示している部分(タグのぶぶん)のようです

たぶん

mailbbs_pc.htmlのここの部分でしょう

[if main/noimg]
添付:{$main/filename}({$main/size}KB)[/if]



{$main/date}

理由はわかりませんが[if :::]から[/if]まで消せば問題ないと思います。

必要な場合はこの部分を直せばいいと思いますが、どこがおかしいのかデバッグできなかったんで勘弁してください。

id:dsa

ifからifまで消すと改行以外の多くの部分も削られると思うのですが。

改行だけ削りたいのです。

2006/04/10 21:27:30
id:bonlife No.2

回答回数421ベストアンサー獲得回数752006/04/10 21:20:22

ポイント1pt

mailbbs.phpの128行目でTemplateファイルを指定しています。

PCで閲覧する場合は、mailbbs.phpの15行目で設定した

$env = "pc";

が有効になるため、

HtmlTemplate::t_include("mailbbs_".$env.".html",$arg);

でt_includeで取り込むファイルはmailbbs_pc.htmlになります。

mailbbs_pc.htmlというファイルの24行目に

<br clear="right"><br><div align="right">{$main/date}</div>

という記述があります。

この部分のことではないでしょうか。

id:dsa

それがですね



」という部分を削除しUPしても

ソース見るとやっぱり「本文

」と変化が無いんですよね。

2006/04/10 21:35:17
id:bonlife No.3

回答回数421ベストアンサー獲得回数752006/04/10 23:56:10

ポイント36pt

実際に動かして確認することが出来ないのでハズレだったら申し訳ありません。

とりあえずソースを見て分かった範囲で説明いたします。

本文はmailbbs.phpでは$bodyという変数で扱われています。

この変数に対する処理は、メールアドレスやURLにハイパーリンクを付与している程度です。

そこで出所を遡っていこうとするとmailbbs.phpの72行目に

  list($id, $ptime, $subject, $from, $body, $att,) = explode("<>", $lines[$i]);

という記述があります。

$linesは31行目で

$lines = file($log);

とあるようにログファイルを行ごとに読み込んだものです。

$logはconfig.phpの13行目で設定されています。

// ログファイルの場所
$log     = "./mail.cgi";

そこで、まず確認して欲しいのがmail.cgiの内容です。

この時点で本文の末尾に<br>はありますでしょうか。

ない場合はちょっと対応方法が分かりません…。

この時点で<br>がある場合、受信処理のpop.phpで改行をセットしていることが考えられます。

pop.phpの190行目で

  $line = "$id<>$now<>$subject<>$from<>$text<>$attach<>\n";

として取り込んだ値を、206行目からの

//ログ書き込み
if ($write2) {
  $fp = fopen($log, "w");
  flock($fp, LOCK_EX);
  fputs($fp, implode('', $lines));
  fclose($fp);
}

という部分でファイルに書き込んでいます。

ここで、$linesの<>区切りの5つ目の変数$textが$bodyになっていることが分かります。

つまり、この$textに対する処理を追っていけば良いはずです。

pop.phpの134行目から160行目が$textに対する処理になります。

最終的に$textの最後の改行を削除するために、160行目に以下のような行を追加してみてはいかがでしょうか。

      $text = str_replace("/(<br>)+$", "", $text);

$textの末尾の<br>の繰り返しを削除する置換です。

的外れかもしれませんが、一度確認してみてください。

id:dsa

2通りやってみましたが駄目でした。



が本文の後に必ず入ります。

[略]

$text = preg_replace("/\n{2,}/", "\n\n", $text);

$text = str_replace("\n", "
", $text);

} $text = str_replace("/(
)+$", "", $text);

-----------------------------------------------------------

[略]

$text = preg_replace("/\n{2,}/", "\n\n", $text);

$text = str_replace("\n", "
", $text);

  $text = str_replace("/(
)+$", "", $text);

}

2006/04/11 03:14:33
id:bonlife No.4

回答回数421ベストアンサー獲得回数752006/04/11 07:25:01ここでベストアンサー

ポイント64pt

mail.cgiの本文部分の最後に<br>が2つ含まれていたでしょうか。

取り急ぎ、昨日の回答に誤りがありましたので訂正いたします。

(mail.cgiの本文部分に<br>が含まれている場合には以下の修正で状況が変わる可能性があります。)

      $text = str_replace("/(<br>)+$", "", $text);
    }

ではなく

      $text = preg_replace("/(<br>)+$/", "", $text);
    }

としてみてください。

ご確認よろしくお願いいたします。

id:dsa

出来ました!

お手数かけて申し訳ございません。

本当にありがとうございました。

2006/04/11 17:15:01

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません