回答編集履歴
4
補足
answer
CHANGED
@@ -2,8 +2,9 @@
|
|
2
2
|
---
|
3
3
|
|
4
4
|
MySQLや他のリソースから取得した文字列がそのままPHPとして評価されると、注意しないといけないことが増えすぎるので基本的にはただの文字列として評価されます。
|
5
|
-
そのため、質問中のコードでは変数部分もただの文字列として評価され、表示されています。
|
6
5
|
|
6
|
+
そのため、質問中のコード`{$name}さん、こんにちは。`では変数部分もただの文字列として表示されています。
|
7
|
+
|
7
8
|
**以下はあまり良くない例です**
|
8
9
|
これを直接解消するには、文字列をPHPとして評価すればいいので、
|
9
10
|
例えば
|
@@ -37,6 +38,10 @@
|
|
37
38
|
|
38
39
|
とある通り、危険で注意すべきことが多い関数なので上記の様なコードはお勧めできません(ほとんどのケースでは書いてはいけないコードに分類されると思います)
|
39
40
|
|
41
|
+
例えばDBに格納されるコードが
|
42
|
+
`die();`であればPHPが途中で処理終了してしまいますし、
|
43
|
+
`exec('rm -rf ./');`であればPHPを実行しているディレクトリ以下のファイルが消えてしまったりします。
|
44
|
+
|
40
45
|
別解
|
41
46
|
---
|
42
47
|
|
3
補足
answer
CHANGED
@@ -48,5 +48,5 @@
|
|
48
48
|
|
49
49
|
別解2
|
50
50
|
---
|
51
|
-
自力で実装したいという欲求がなければ、適当なテンプレートエンジン(`PHP テンプレートエンジン`
|
51
|
+
自力で実装したいという欲求がなければ、適当なテンプレートエンジン(`PHP テンプレートエンジン`で調べてみてください。)
|
52
52
|
を使うのが確実で且つクオリティの高いものが出来ます。
|
2
補足
answer
CHANGED
@@ -41,7 +41,7 @@
|
|
41
41
|
---
|
42
42
|
|
43
43
|
自力で単純に変数を当てはめたいのであれば
|
44
|
-
[sprintf()](https://www.php.net/manual/ja/function.sprintf.php)の書式に沿った文字列を格納しておいて文字列をはめ込んだり、
|
44
|
+
[sprintf()](https://www.php.net/manual/ja/function.sprintf.php)の書式に沿った文字列を格納しておいて`sprintf()`や`vsprintf()`文字列をはめ込んだり、
|
45
45
|
独自の書式を作って変数を表現し[str_replace()](https://www.php.net/manual/ja/function.str-replace.php)や[preg_replace()](https://www.php.net/manual/ja/function.preg-replace)で置換をかけるのがよくある方法です。
|
46
46
|
|
47
47
|
実用まで持っていくのであれば`PHP テンプレートエンジン 作り方`とかで調べてみてください。
|
1
補足
answer
CHANGED
@@ -2,9 +2,10 @@
|
|
2
2
|
---
|
3
3
|
|
4
4
|
MySQLや他のリソースから取得した文字列がそのままPHPとして評価されると、注意しないといけないことが増えすぎるので基本的にはただの文字列として評価されます。
|
5
|
+
そのため、質問中のコードでは変数部分もただの文字列として評価され、表示されています。
|
5
6
|
|
6
|
-
|
7
7
|
**以下はあまり良くない例です**
|
8
|
+
これを直接解消するには、文字列をPHPとして評価すればいいので、
|
8
9
|
例えば
|
9
10
|
```PHP
|
10
11
|
<?php
|
@@ -20,6 +21,7 @@
|
|
20
21
|
|
21
22
|
}
|
22
23
|
|
24
|
+
//DB保存の文字列はPHPとしては不完全なので補完
|
23
25
|
eval('echo "'.$str.'";');
|
24
26
|
|
25
27
|
|