38
39

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-04-12

##はじめに

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

38
39
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
38
39

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?