Edited at

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

More than 1 year has passed since last update.


はじめに

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のデータを処理する方法