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対策については、下記のサイト様に詳しく乗っています。
③implode(文字列成形)
implodeを使い配列を文字列に変換して、PHPからJavaScriptに渡す方法もあります。
しかし、「json_encode」でも配列の受け渡しは出来るため、こちらの方法で受け渡す意味は無いと思います。
まとめ
PHPはサーバーサイドですので、基本的にPHPで作った変数は全てhtmlやJavaScriptに渡す事が出来ます。
逆にJavaScriptで作った変数をPHPに渡したい場合はajaxなどを使わないといけません。
PHPから変数を渡すときは、セキュリティについて、考えながら渡すことが大事だと思います。
参考サイト
PHPでJSONのデータを処理する方法
Author And Source
この問題について(PHPからhtml、javascriptへの変数、配列の受け渡し), 我々は、より多くの情報をここで見つけました https://qiita.com/cr_tk/items/900914e8a6e19ee3c5b7著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .