回答編集履歴

4

補足

2020/11/04 12:55

投稿

tanat
tanat

スコア18727

test CHANGED
@@ -6,7 +6,9 @@
6
6
 
7
7
  MySQLや他のリソースから取得した文字列がそのままPHPとして評価されると、注意しないといけないことが増えすぎるので基本的にはただの文字列として評価されます。
8
8
 
9
+
10
+
9
- そのため、質問中のコードでは変数部分もただの文字列として評価され、表示されています。
11
+ そのため、質問中のコード`{$name}さん、こんにちは。`では変数部分もただの文字列として表示されています。
10
12
 
11
13
 
12
14
 
@@ -76,6 +78,14 @@
76
78
 
77
79
 
78
80
 
81
+ 例えばDBに格納されるコードが
82
+
83
+ `die();`であればPHPが途中で処理終了してしまいますし、
84
+
85
+ `exec('rm -rf ./');`であればPHPを実行しているディレクトリ以下のファイルが消えてしまったりします。
86
+
87
+
88
+
79
89
  別解
80
90
 
81
91
  ---

3

補足

2020/11/04 12:55

投稿

tanat
tanat

スコア18727

test CHANGED
@@ -98,6 +98,6 @@
98
98
 
99
99
  ---
100
100
 
101
- 自力で実装したいという欲求がなければ、適当なテンプレートエンジン(`PHP テンプレートエンジン`)
101
+ 自力で実装したいという欲求がなければ、適当なテンプレートエンジン(`PHP テンプレートエンジン`で調べてみてください。)
102
102
 
103
103
  を使うのが確実で且つクオリティの高いものが出来ます。

2

補足

2020/11/04 12:34

投稿

tanat
tanat

スコア18727

test CHANGED
@@ -84,7 +84,7 @@
84
84
 
85
85
  自力で単純に変数を当てはめたいのであれば
86
86
 
87
- [sprintf()](https://www.php.net/manual/ja/function.sprintf.php)の書式に沿った文字列を格納しておいて文字列をはめ込んだり、
87
+ [sprintf()](https://www.php.net/manual/ja/function.sprintf.php)の書式に沿った文字列を格納しておいて`sprintf()`や`vsprintf()`文字列をはめ込んだり、
88
88
 
89
89
  独自の書式を作って変数を表現し[str_replace()](https://www.php.net/manual/ja/function.str-replace.php)や[preg_replace()](https://www.php.net/manual/ja/function.preg-replace)で置換をかけるのがよくある方法です。
90
90
 

1

補足

2020/11/04 12:30

投稿

tanat
tanat

スコア18727

test CHANGED
@@ -6,11 +6,13 @@
6
6
 
7
7
  MySQLや他のリソースから取得した文字列がそのままPHPとして評価されると、注意しないといけないことが増えすぎるので基本的にはただの文字列として評価されます。
8
8
 
9
-
9
+ そのため、質問中のコードでは変数部分もただの文字列として評価され、表示されています。
10
10
 
11
11
 
12
12
 
13
13
  **以下はあまり良くない例です**
14
+
15
+ これを直接解消するには、文字列をPHPとして評価すればいいので、
14
16
 
15
17
  例えば
16
18
 
@@ -41,6 +43,8 @@
41
43
  }
42
44
 
43
45
 
46
+
47
+ //DB保存の文字列はPHPとしては不完全なので補完
44
48
 
45
49
  eval('echo "'.$str.'";');
46
50