PHPからhtml、javascriptへの変数、配列の受け渡し


はじめに

PHPプログラムからhtml、javascriptへの配列の渡し方について記載します。

HTML

①PHPで宣言した変数をechoを使い出力する。


<?php
 $php_test = "test";
?>

<html>
 <head>
 </head>
 <body>
  php変数、<?php echo $php_test; ?>出力
  php変数(htmlspecialchars)、<?php echo htmlspecialchars($php_test, ENT_QUOTES, 'UTF-8');?>出力
 </body>
</html>

上記の方法で出力出来ますが、PHPの変数を直接HTMLに入れてしまうとXSS(クロスサイトスクリプティング)の標的になってしまう事があります。
htmlspecialchars」を使いサニタイズ処理をすることでXSSの対策が出来ます。
表示したい文字列に「改行文字」などがある場合は改行されずに「改行文字」が表示されてしまいます。
その場合は、「nl2br」、「replace」、PHPからの変数の出力部分のみjavascriptを無効化する処理を入れるなどの対策で対応可能です。

javascript

①PHPで宣言した変数をそのまま入れる。


<?php
$php_test = "test"
?>

<script>
var  js_test = <?php echo $php_test; ?>
var  js_test2 = <?php echo htmlspecialchars($php_test, ENT_QUOTES, 'UTF-8');?>
</script>

上記の方法で出力出来ますが、JavaScriptに対してPHPには「htmlspecialchars」のように簡単なサニタイズ処理が出来る機能がありません。

下記のサイト様にjQueryを使っていますが、JavaScriptで「htmlspecialchars」を使う方法が記載されています。
jQueryでPHPのhtmlspecialchars()使う方法!

②json_encodeを使う


<?php

 $php_test = "test"
 $json_test = json_encode( $php_test , JSON_HEX_TAG | JSON_HEX_AMP | JSON_HEX_APOS | JSON_HEX_QUOT);
) ;

 $list = {"1","2","3"}
 $json_list = json_encode( $list , JSON_HEX_TAG | JSON_HEX_AMP | JSON_HEX_APOS | JSON_HEX_QUOT);
) ;
?>

<script>
 var  js_test =JSON.parse('<?php echo $json_test; ?>');

 var  js_list =JSON.parse('<?php echo $json_list; ?>'); 
</script>

json_encodeを使ってPHPとJavaScriptの変数の受け渡しをします。
jsonを使ったXSS対策については、下記のサイト様に詳しく乗っています。

JSONのエスケープ

③implode(文字列成形)
implodeを使い配列を文字列に変換して、PHPからJavaScriptに渡す方法もあります。
しかし、「json_encode」でも配列の受け渡しは出来るため、こちらの方法で受け渡す意味は無いと思います。

まとめ

PHPはサーバーサイドですので、基本的にPHPで作った変数は全てhtmlやJavaScriptに渡す事が出来ます。
逆にJavaScriptで作った変数をPHPに渡したい場合はajaxなどを使わないといけません。
PHPから変数を渡すときは、セキュリティについて、考えながら渡すことが大事だと思います。

参考サイト
PHPでJSONのデータを処理する方法