回答編集履歴

2

修正

2018/02/26 05:59

投稿

m.ts10806
m.ts10806

スコア80852

test CHANGED
@@ -66,4 +66,4 @@
66
66
 
67
67
 
68
68
 
69
- phpにて「画面出力時にエスケープしたい情報に対してhtmlspecialcharsを使うが正しい理解です。
69
+ phpにて**「画面出力時にエスケープしたい情報に対してhtmlspecialcharsを使う」**が正しい理解です。

1

追記

2018/02/26 05:58

投稿

m.ts10806
m.ts10806

スコア80852

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