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

回答編集履歴

3

修正

2015/03/08 14:33

投稿

ngyuki
ngyuki

スコア4516

answer CHANGED
@@ -70,7 +70,7 @@
70
70
 
71
71
  ```lang-php
72
72
  <?php
73
- $terms = Constant::terms;
73
+ $terms = AppConst::terms;
74
74
  ```
75
75
 
76
76
  JS 側で欲しければ次のような感じです。

2

追記

2015/03/08 14:33

投稿

ngyuki
ngyuki

スコア4516

answer CHANGED
@@ -36,4 +36,52 @@
36
36
  ```
37
37
 
38
38
  (JSON とかが無かった時代はこの方法がよく使われていたような気がする)
39
- (もっともその時代に data-* アトリビュートは無かったので input の type=hidden とかを使ってましたが)
39
+ (もっともその時代に data-* アトリビュートは無かったので input の type=hidden とかを使ってましたが)
40
+
41
+ ---
42
+
43
+ もし terms という値が定数的なもの(30 と値がベタ書きされていてアプリケーション内で変更されることがない)のであれば、php のソースファイルから js のコードを静的に生成する方法も考えられます。
44
+
45
+ 例えば次のように定数を定義するためのクラスを作り、
46
+
47
+ ```lang-php
48
+ <?php
49
+ class AppConst
50
+ {
51
+ const terms = 30;
52
+
53
+ public static function buildJavaScript()
54
+ {
55
+ $ref = new ReflectionClass(__CLASS__);
56
+ $json = json_encode($ref->getConstants());
57
+ echo "var AppConst = $json;\n";
58
+ }
59
+ }
60
+ ```
61
+
62
+ 下記のコードの実行結果を `const.js` などと保存しておきます。
63
+
64
+ ```lang-php
65
+ <?php
66
+ AppConst::buildJavaScript();
67
+ ```
68
+
69
+ PHP 側ので terms の値が欲しければ次のようにします。
70
+
71
+ ```lang-php
72
+ <?php
73
+ $terms = Constant::terms;
74
+ ```
75
+
76
+ JS 側で欲しければ次のような感じです。
77
+
78
+ ```lang-php
79
+ <html>
80
+ <head>
81
+ <script src="const.js"></script>
82
+ </head>
83
+ <script>
84
+ var terms = AppConst.terms;
85
+ console.log(terms);
86
+ </script>
87
+ ```

1

追記

2015/03/08 03:05

投稿

ngyuki
ngyuki

スコア4516

answer CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  ```lang-php
4
4
  <?php
5
- $terms = "</script>";
5
+ $terms = "<script>alert(1)</script>";
6
6
  ?>
7
7
  <html>
8
8
  <head>
@@ -14,4 +14,26 @@
14
14
  <script>
15
15
  console.log(terms);
16
16
  </script>
17
- ```
17
+ ```
18
+
19
+ ---
20
+
21
+ あるいは適用な要素の属性値に入れてしまうという方法もあります。
22
+
23
+ ```lang-php
24
+ <?php
25
+ $terms = "<script>alert(1)</script>";
26
+ ?>
27
+ <html>
28
+ <head>
29
+ <script id="data" data-terms="<?= htmlspecialchars($terms)?>"></script>
30
+ </head>
31
+ <script src="sample.js"></script>
32
+ <script>
33
+ var terms = document.getElementById('data').getAttribute('data-terms');
34
+ console.log(terms);
35
+ </script>
36
+ ```
37
+
38
+ (JSON とかが無かった時代はこの方法がよく使われていたような気がする)
39
+ (もっともその時代に data-* アトリビュートは無かったので input の type=hidden とかを使ってましたが)