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

回答編集履歴

4

補足

2020/11/04 12:55

投稿

tanat
tanat

スコア18778

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

補足

2020/11/04 12:55

投稿

tanat
tanat

スコア18778

answer CHANGED
@@ -48,5 +48,5 @@
48
48
 
49
49
  別解2
50
50
  ---
51
- 自力で実装したいという欲求がなければ、適当なテンプレートエンジン(`PHP テンプレートエンジン`)
51
+ 自力で実装したいという欲求がなければ、適当なテンプレートエンジン(`PHP テンプレートエンジン`で調べてみてください。)
52
52
  を使うのが確実で且つクオリティの高いものが出来ます。

2

補足

2020/11/04 12:34

投稿

tanat
tanat

スコア18778

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

補足

2020/11/04 12:30

投稿

tanat
tanat

スコア18778

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