PHPコーディング
文字列のエスケープ
2007年03月31日
まだサイトマップメーカーが動かないらしいので、色々調べてみました。ページでエラーが出ていたので、その箇所を見てみると、URLに【'】が入っていて、それが原因のようです。
URLに【'】って入れられるんだぁ、思いつかなかった。それならエスケープをしないといけません。
JavaScriptにURLを引き渡している部分もあります。JavaScriptでもPHPと同じエスケープ方法でOKです。
addslashes($URL) として、URLにある【'】、【"】、【\】、【Null】をエスケープします。
【'】は【\'】とエスケープされます。
そして、formでpostされた値は、PHPの設定によって、postされるとき自動的にエスケープされるかどうかが決まります。 magic_quotes_gpcの値がOn(1)ならエスケープされます。get_magic_quotes_gpc()でmagic_quotes_gpcの設定を確認できます。
magic_quotes_gpcがOn(1)なら、エスケープされた文字列を元に戻さなければいけません。stripslashes($URL)で元に戻ります。
これでエラーもなくなり、私のブラウザからは何の問題もなく動いています。
URLに【'】って入れられるんだぁ、思いつかなかった。それならエスケープをしないといけません。
JavaScriptにURLを引き渡している部分もあります。JavaScriptでもPHPと同じエスケープ方法でOKです。
addslashes($URL) として、URLにある【'】、【"】、【\】、【Null】をエスケープします。
【'】は【\'】とエスケープされます。
そして、formでpostされた値は、PHPの設定によって、postされるとき自動的にエスケープされるかどうかが決まります。 magic_quotes_gpcの値がOn(1)ならエスケープされます。get_magic_quotes_gpc()でmagic_quotes_gpcの設定を確認できます。
magic_quotes_gpcがOn(1)なら、エスケープされた文字列を元に戻さなければいけません。stripslashes($URL)で元に戻ります。
これでエラーもなくなり、私のブラウザからは何の問題もなく動いています。
コメント