PHPによるHTMLタグの自動補完が原因でjavascript内でエラーが発生
カテゴリー:PHP
ユーザ認証を用いたPHP、javascirptのコードを書いていたが、
どうもブラウザ(firefox 2.0)の起動して1回目にページを表示したときのみ動作しなくなっていた。
動作しない原因を調べるとjavascript内でhtmlタグを格納している関数部分に
ブラウザで出力するときに余計なinputタグが付属してエラーの原因になっていた。
実際のファイルコード
<script type="text/javascript">ブラウザに出力されるコード
var test;
test = "<form>";
-----略------
</script>
<script type="text/javascript" src="jkl-resizable.js"></script>
<script type="text/javascript">
var test;
test = "<form><input type="hidden" name="PHPSESSID" value="b0d36a01a4740082be618b92156b9eb5" />";
-----略------
<input type="hidden" name="PHPSESSID" value="b0d36a01a4740082be618b92156b9eb5" />
の部分が勝手に付属したこと"の中にエスケープしていない"が出力されてしまっているのでjavascriptがその部分でエラーを起こし止っていた。
このinputタグがブラウザによって補完されたものなのかサーバ側で補完されているのか確かめるためにetherealでローカルに送られてくるデータを確認した。
送られてくるデータはすでにinputタグがついていたため、これはサーバ側の問題のよう。
そこでPHPのマニュアルを調べると以下のような記述を発見
http://jp.php.net/manual/ja/ref.session.php
url_rewriter.tags string
url_rewriter.tagsは、透過的なセッションIDの 付加機能が有効となった場合に、セッションIDを含めるために書き換 えられるHTMLタグを指定します。
デフォルトは、 a=href,area=href,frame=src,input=src,form=fakeentry,fieldset= です。
この機能によってjavascriptのコード部分でも<form>という記述があると無理やり書き換えられてしまっているようです。
解決策としてこの自動的に付加される部分のクオーテーションはすべて"であるため、javascript側のコード内のクオーテーションを「'」で書くとエラーは起こりません。
環境
Apache/2.0.52 (CentOS)
PHP/4.3.9
関連記事
Comment