teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

修正

2018/02/26 05:59

投稿

m.ts10806
m.ts10806

スコア80888

answer CHANGED
@@ -32,4 +32,4 @@
32
32
 
33
33
 
34
34
 
35
- phpにて「画面出力時にエスケープしたい情報に対してhtmlspecialcharsを使うが正しい理解です。
35
+ phpにて**「画面出力時にエスケープしたい情報に対してhtmlspecialcharsを使う」**が正しい理解です。

1

追記

2018/02/26 05:58

投稿

m.ts10806
m.ts10806

スコア80888

answer CHANGED
@@ -2,6 +2,34 @@
2
2
 
3
3
  それは間違いないですが、
4
4
 
5
+ ```php
5
- ```<?php echo htmlspecialchars($_POST['name']); ?>```
6
+ <?php echo htmlspecialchars($_POST['name']); ?>
7
+ ```
6
8
 
7
- は**$_POST['name']に格納されている値に対してhtmlspecialchars()を掛けて画面出力する**記述であり、$_POST['name']自身が変化しているわけではありません。
9
+ は**$_POST['name']に格納されている値に対してhtmlspecialchars()を掛けて画面出力する**記述であり、$_POST['name']自身が変化しているわけではありません。
10
+
11
+ > 上記コードを表示する箇所全てに表示するという事態になりかねません。
12
+
13
+ 「表示する箇所全てに表示する」というのは「表示する箇所全てにhtmlspecialchars()」をかけるという意味でいいですかね?
14
+ htmlspecialchars()は基本的に画面出力する際にかけるものなので、基本的には、そうです。
15
+
16
+ 一応、```$_POST["test"] = "hogehoge";```のようにしてSUBMITされていない情報を設定したり、SUBMITされた情報を上書きするのも可能ではありますが、私はそういう使い方をしたことがありません。
17
+ $_POSTの値を直接参照したくないのであれば、一度何かしらの変数で受けて、その変数に対して色々処理を施していく、というのが通常の運用方法かと思います。
18
+ もし「全箇所にかけなければならない」という懸念があるのでしたら、$_POSTをそのまま別の変数に受け取っておき、foreachで回して全てにhtmlspecialchars()を掛けた上で、その変数を画面出力に利用すれば良いと思います。
19
+
20
+ ```php
21
+ $post_vars = $_POST;
22
+ foreach($post_vars as $key=>$value){
23
+ $post_vars[$key] = htmlspecialchars($value);
24
+ }
25
+
26
+ echo $post_vars["test1"];
27
+ echo $post_vars["test2"];
28
+ ```
29
+
30
+ というので、正確には
31
+ > phpにてエスケープしたいとき、htmlspecialcharsを使わなければいけないとおもっていました。
32
+
33
+
34
+
35
+ phpにて「画面出力時にエスケープしたい情報に対して」htmlspecialcharsを使うが正しい理解です。