javascript in html な文脈に PHP から値を出力するときは常に json_encode
したほうが良いでしょう。
lang
1<?php
2$terms = "<script>alert(1)</script>";
3?>
4<html>
5<head>
6<script>
7var terms = <?= json_encode($terms) ?>;
8</script>
9</head>
10<script src="sample.js"></script>
11<script>
12 console.log(terms);
13</script>
あるいは適用な要素の属性値に入れてしまうという方法もあります。
lang
1<?php
2$terms = "<script>alert(1)</script>";
3?>
4<html>
5<head>
6<script id="data" data-terms="<?= htmlspecialchars($terms)?>"></script>
7</head>
8<script src="sample.js"></script>
9<script>
10 var terms = document.getElementById('data').getAttribute('data-terms');
11 console.log(terms);
12</script>
(JSON とかが無かった時代はこの方法がよく使われていたような気がする)
(もっともその時代に data-* アトリビュートは無かったので input の type=hidden とかを使ってましたが)
もし terms という値が定数的なもの(30 と値がベタ書きされていてアプリケーション内で変更されることがない)のであれば、php のソースファイルから js のコードを静的に生成する方法も考えられます。
例えば次のように定数を定義するためのクラスを作り、
lang
1<?php
2class AppConst
3{
4 const terms = 30;
5
6 public static function buildJavaScript()
7 {
8 $ref = new ReflectionClass(__CLASS__);
9 $json = json_encode($ref->getConstants());
10 echo "var AppConst = $json;\n";
11 }
12}
下記のコードの実行結果を const.js
などと保存しておきます。
lang
1<?php
2AppConst::buildJavaScript();
PHP 側ので terms の値が欲しければ次のようにします。
lang
1<?php
2$terms = AppConst::terms;
JS 側で欲しければ次のような感じです。
lang
1<html>
2<head>
3<script src="const.js"></script>
4</head>
5<script>
6var terms = AppConst.terms;
7console.log(terms);
8</script>
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2015/03/08 14:26