アクセス向上大失敗 www.igros.net
Last updated 2004/8/16
コメントバック 対応

データ整形と\エスケープ -簡単PHP掲示板講座 STEP4-

[PR]特集 Amazon.co.jp レコメンドコンテンツ



STEP4
・掲示板に書込まれたデータを掲示板へ反映する前に簡単なデータ整形を行う
  [STEP3の問題点] 本文を書きこむ人は適当な位置で改行したりしますが、掲示板へ反映すると改行されず1行で出力されている。
  [要点] 改行コードをHTML<br>タグに置き換えます。
参考ソースプログラム
解説
<?php
# プログラム bbs.php STEP4
 $name = $HTTP_POST_VARS["NAME"];
 $mail = $HTTP_POST_VARS["MAIL"];
 $body = $HTTP_POST_VARS["BODY"];
 $body = str_replace("\r\n", "<br>", $body);
 echo '
  <html>
  <head>
  <title>PHP-BBS</title>
  </head>
  <body>
  <h1>PHP-BBS</h1>
  STEP4<br>
  <form method="post" action="bbs.php" accept-charset="x-euc-jp">
  お名前 <input type="text" size="16" maxlength="30" name="NAME">
  メール <input type="text" size="30" maxlength="50" name="MAIL"><br>
  本文<br>
  <textarea rows="10" cols="70" wrap="soft" name="BODY"></textarea><br>
  <input type="submit" name="SUBMIT" value="送信">
  </form>
 ';
 echo "お名前:<a href=\"mailto:$mail\">$name</a><br>";
 echo "本文:$body<br>";
 echo '</body></html>';
?>
<textarea wrap="soft">で指定したテキストエリア内で[Enter]キーで改行された場合、目に見えない特殊な文字コードが入ります。
このコードを直接HTMLとしてブラウザに出力しても改行はされません。
$body = str_replace("\r\n", "<br>", $body);はstr_replace(文字列置換)と言うPHPの命令文で$body内のデータに対し、"リターン(\r)改行(\n)"と言う並びの文字コードを"<br>"に置き換え、再び$bodyに格納しなさい、と言う意味になります。
<br>はHTMLの改行を意味しますので、これでちゃんと改行表示されるようになります。
このように" "で囲まれた中で\に続く文字はエスケープシーケンスと呼ばれ、PHPは特別な解釈を行います。

お名前:<a href=\"mailto:$mail\">$name</a>はSTEP3の変形です。
入力されたメールアドレスをあえて表示せず、名前のリンクとして使います。
良くみかけるタイプで名前をクリックするとメールが立ち上がる、アレです。
" "の中で更に" "を2重、3重に使う場合、どこからどこまでが一つの" "範囲かPHPは理解できなくなります。
これを解決するにも\を使ったエスケープシーケンスを用います。
" "の中で"を使う場合、"の先頭に\を付け加えます。
つまり " \" \" " のようになります。
では質問です!
$colorに文字色、$sizeにフォントサイズを保持している場合、echo文を使って<font>タグをどう出力しますか?
答えは最後に...

ここまでのサンプル check!

次は入力データのチェックを加えてみることにします。
入力必須チェックとメールアドレスのチェックを入れてみましょう。

答え:echo "<font color=\"$color\" size=\"$size\">";


<<<< トップ <<< テーマトップ << サブテーマトップ < 前頁次頁 >

www.igros.net
[PR]特集 Amazon.co.jp レコメンドコンテンツ



Copyright(C) アクセス向上大失敗 All Rights Reservd.
version2.0