プロが教える店舗&オフィスのセキュリティ対策術

自分で調べてみましたが、どうしてもわからず行き詰まりました。
どなたかお知恵を貸して頂ければ幸いです。

【使用ファイル】
a.php php処理
b.html db抽出データ表示とフォーム(編集画面)
c.html フォーム入力内容表示(確認画面)

データ送信はPOSTとSmarty併用
dbへはMySQLで格納

【変数】
$z テキストエリアの項目値

【流れ】
a.php→b.html→a.php→c.html→a.php→b.html/dbへ格納

1:a.phpでdbよりデータ(テキスト)を抽出し追加、変数$zに格納。

2:Smartyでb.htmlへ$zを送る。送り先はフォーム内のテキストエリア値。

3:$zにテキスト追加で改行発生 (\n発生と予測)。

4:b.htmlからPOSTでa.phpへ。 nl2br($z)処理をし、<br />挿入。

5:Smartyでc.htmlへ$zを送る。 $zには<br>と\nの両方が入っている状態。改行表示される。ブラウザのページソースでは<br />が入っている。

6-1:c.html(POST)→a.php(smarty)→b.html str_replace("<br />,"","$z)で<br />を取り除き\nのみの状態 smartyでb.htmlへ

6-2:c.html(POST)→a.php→db格納  str_replace("<br />,"","$z)で<br />を取り除き\nのみの状態でdbへ格納

6-1,2とも<br />を入れたままだと文字列に<br />が入ってしまう

7:a.php→b.htmlで再度$zを呼び出してみると(1:の処理)<br />を取り除いたはずなのに、ブラウザではきちんと改行表示されている。
ブラウザのページソースに<br />の表示はない

【疑問点】
3:\nは発生してPOSTでa.phpにきているのか?
きている種類が\nまたは他の改行文字かどうかを調べる手段はあるのか?バイナリ関連で調べるのか?

6-1:<br />を削除してhtmlへ送っているのに改行表示されるのか?
<br />が文字列扱いになるのはなぜか?

6-2:dbでは\nが改行として認識されるのか?

7:\nしか入っていない文字列をブラウザ表示して、なぜ改行表示されるのか?

以上です。考えれば考える程にわからなくなってきました。
どうぞよろしくお願いします。

A 回答 (3件)

>> ブラウザは固定された(?)\nは改行として読み取るという事でしょうか。


に対する補足です。

<!-- HTML sample -->
<textarea>
「文章」
</textarea>
<!-- end of HTML sample -->

HTMLで<textarea>タグを上記のように記述すると、「文章」が複数行なら、
Webブラウザに表示されるテキストエリア内の「文章」も複数行になります。

ですから、プログラムで、
print("<textarea>\n");
print($z); //<-- $zには改行(\n)が含まれています。
print("</textarea>\n");
と記述すると、プログラムからWebブラウザに送られるHTMLソースは
上記の<!-- HTML sample -->と同様になり、$zの改行が反映される
というわけです。
    • good
    • 0
この回答へのお礼

なるほど…改行反映されるんですね。
度々ありがとうございます。感謝します!

お礼日時:2007/09/17 18:02

初回答です。

言葉足らずだったらごめんなさい。

まず、
>> 3:\nは発生してPOSTでa.phpにきているのか?
は、はっきりとは覚えていませんが、<textarea></textarea>に
入っている文字列をプログラムで受け取った場合、文字列には改行文字が入っていたはずです。

$z = str_replace("\n","hogehoge",$z);
print($z);
としてみて、改行位置にhogehogeが入っていれば、改行文字は\n
ということになるのではないでしょうか。
置換されていない場合は、\nを他の文字に置き換えて試してみれば
よいのでは?

次に、
>> 6-1:<br />を削除してhtmlへ送っているのに改行表示されるのか?
>> 7:\nしか入っていない文字列をブラウザ表示して、なぜ改行表示されるのか?
です。
$zには改行文字\nが入っています。
(例えば、$z="aaa\nbbb\n"とします。)
この状態で、
print("<textarea>\n");
print($z);
print("</textarea>\n");
を実行すると、HTML上では、
<textarea>
aaa
bbb
</textarea>
となり、WEBブラウザで見ると、
---------
|aaa
|bbb
---------
というテキストエリアとして表示されます。
(実際にHTMLを書いて、WEBブラウザで表示してみるとわかります。)

最後に、
>> 6-2:dbでは\nが改行として認識されるのか?
です。
これはOS等の環境によって変わってくる可能性はあると思いますが、
大雑把に言って、プログラムから改行文字をDBに送った場合、
DBの方でも改行文字として認識してくれるはずです。
    • good
    • 0
この回答へのお礼

ありがとうございます!
ブラウザは固定された(?)\nは改行として読み取るという事でしょうか。現在テスト環境にいないので、すぐに取り掛かれないのがもどかしいですが、月曜に早速テストしてみようと思います。
$zに来ている改行文字がなんなのかを調べてみます。
1人で煮詰まってたので、本当にありがとうございました。

お礼日時:2007/09/16 00:27

> str_replace("<br />,"","$z)



本当にこのコードを書かれているとすると、
ダブルクォーテーションとカンマの位置関係が
正しくないように見えます。

str_replace("<br />", "", $z)

ではないのでしょうか?
    • good
    • 0
この回答へのお礼

細かいところを見ていただいてありがとうございます。
これは、質問作成時の記載ミスです、実際のコードはご指摘通りのカンマ位置で書いてあります。
1人で煮詰まってたのでご指摘頂けて嬉しかったです。
ありがとうございました。

お礼日時:2007/09/16 00:32

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!