引用符を含んだ文字列をJavascriptに埋め込みたい


場所名の英語のデータをfor文で取得して、

`var contentString_restaurant = '<p><a href="//www.hoge.com/restaurant/<?php
echo $nearest_restaurants[$i]['Restaurant']['id'];?>/" target="_blank"><?php
echo $nearest_restaurants[$i]['Restaurant']['en_name'];?></a></p>'`

googlemapで表示させたいのですが、取得した`$nearest_restaurants[$i]['Restaurant']['en_name']`内にシングルクォーテーションが含まれている為にエラーとなってしまいます。

個別の変数の場合は`¥`等でエスケープできますが、このように複数取得する場合、綺麗にシングルクォーテーションをエスケープする方法はありますか？




この例ではHTMLとしてのエスケープとjavascriptとしてのエスケープの両方をする必要があり、エスケープが中途半端だと簡単に脆弱性が生じます。特にjavascriptのエスケープは汎用的な方法がなく難易度が高いものです。phpに限らず、javascriptの変数を動的に生成するのはリスクが高いのでやめましょう。

(PHPによるjavascriptの変数の生成の時に`json_encode()`を使う方法を提案される方もいますが、安全に利用するには適切なパラメータを指定する必要があり、ただ`json_encode()`を使えばよいというものではありません)

この例での代替案としてはPHPで`$nearest_restaurants`のデータを含んだHTMLを生成するのではなく、そのデータをJSON形式で出力するAPIを用意して、javascriptからそのAPIを使用してデータを取得し処理するのがよいのではないでしょうか。

また、webアプリを安全に実装するのは意外に難しいので、信頼できる書籍(「体系的に学ぶ安全なWebアプリケーションの作り方」はおすすめ出来ます)などできちんと勉強されることをお勧めします。




この例ではHTMLとしてのエスケープとjavascriptとしてのエスケープの両方をする必要があり、エスケープが中途半端だと簡単に脆弱性が生じます。特にjavascriptのエスケープは汎用的な方法がなく難易度が高いものです。phpに限らず、javascriptの変数を動的に生成するのはリスクが高いのでやめましょう。

(PHPによるjavascriptの変数の生成の時に`json_encode()`を使う方法を提案される方もいますが、安全に利用するには適切なパラメータを指定する必要があり、ただ`json_encode()`を使えばよいというものではありません)

この例での代替案としてはPHPで`$nearest_restaurants`のデータを含んだHTMLを生成するのではなく、そのデータをJSON形式で出力するAPIを用意して、javascriptからそのAPIを使用してデータを取得し処理するのがよいのではないでしょうか。

また、webアプリを安全に実装するのは意外に難しいので、信頼できる書籍(「体系的に学ぶ安全なWebアプリケーションの作り方」はおすすめ出来ます)などできちんと勉強されることをお勧めします。

