- ベストアンサー
htmlについて
今、ゲームを作っているのですが、名前のフォーム(input)に<br>などのタグを入力しSESSIONに入れると、POSTで渡した際に改行になってしまいます。 これを'<br>'と出力するにはどうすればよろしいでしょうか・・・? 使っているのはhtml,phpです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
「>」は>または>、「<」は<または<に変換して表示します。 他の記号についても同様のコードがありますので、参照URLで確認してください。 また、名前欄にJavascriptを埋め込み攻撃を行うテクニックなどがありますので、 セキュリティリスクをすべて排除するよう、許可する文字、コード変換する文字、禁止する文字を しっかり整理しておくべきです。 サニタイズなどのキーワードでしっかりお勉強することをおすすめします。
その他の回答 (2)
- ORUKA1951
- ベストアンサー率45% (5062/11036)
>POSTで渡した際に改行になってしまいます。 タグを削除して改行コードを挿入するとか、何かの処理をしないとそうはなりません。 これって、HTMLとして出力したときに、そのままになっているので<br>として表示されるいうことでは? それとも、・・・ 通常はタグではなく、textareaを使って改行を入力させて、それを<br>とせずに、段落全体を<p></p>で囲みますが、nameでしたら、<br>でよいかも・・ $value=~/<br>/\<\;br\>\;/g;
お礼
質問がわかりづらく申し訳ございません。 結果的にはhtmlspecialchars($mozi) で解決いたしました。 ありがとうございました。
- Gletscher
- ベストアンサー率23% (1525/6504)
質問の意味が分かりにくいのですが・・・ フォームの名前を入れる欄に、「<br>」という文字を入力するという意味でしょうか? 「SESSIONに入れる」というのが、どのような操作を示しているか分からないのですが・・・ HTMLタグで改行を入力したら、実際に改行になるのであれば、cgiの処理がそのようにしているということですね。 何も処理をしてなければ入力したままの文字になるはずです。 しかし、改行など特殊な文字を入力されるとプログラムが暴走する恐れがあるため、それらは事前処理されるように組むのが普通です。 文字として「<br>」と入力したいのであれば、エンティティ化すればよいのではないでしょうか? 「<br>」
お礼
質問がわかりづらく申し訳ございません。 結果的にはhtmlspecialchars($mozi) で解決いたしました。 ありがとうございました。
補足
質問の仕方が荒く、申し訳ありません。 フォームの名前を入れる欄に<br>を入力する、という意味です。 SESSIONに入れる、というのは後々その文字を記憶しておきたいためです。 $_SESSION['close1']=array("&","<",">",'"'); function close($st){ $ok=""; $len=strlen($st); for($i=0;$i<len;$i++){ for($j=0;$j<4;$j++){ $ii=$_SESSION['close1'][$j]; if($st[$i]==$ii){ break; } } if($j==0){ $ok+="&"; }else if($j==1){ $ok+="<"; }else if($j==2){ $ok+=">"; }else if($j==3){ $ok+="""; }else{ $ok+=$st[$i]; } } return $ok; } として、 $i=strlen($_POST['name1']); $_SESSION['name1']=close($st); でfunctionを起動したのですが、うまくいきませんでした・・・。
お礼
質問がわかりづらく申し訳ございません。 結果的にはhtmlspecialchars($mozi) で解決いたしました。 ありがとうございました。
補足
回答ありがとうございます。 なるほど。 その文字の入力自体を禁止してしまう、というのも手ですね。 うまくいかなかったら、そちらの方法でいかせていただきます!