[PHP-users 31298] \記号のエスケープについて
Mihashi
pml_384 @ yahoo.co.jp
2007年 1月 22日 (月) 16:49:58 JST
はじめまして。三橋と申します。
先ほど送らせていただいた、MLが環境によって文字化けしていたため再送いたします。
ご迷惑をおかけします。
以下のサンプルを実行した際に予期せぬエスケープが行われて、JavaScriptの構文エラーとなってしまいます。
環境設定の問題だと思うのですが、見当がつかないため、ご教授宜しくお願い致します。
// サンプル
<?php
Session_Start();
$rtnStr = <<< RTN_STR
<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=EUC-JP">
<TITLE></TITLE>
<SCRIPT language="JavaScript">
<!--
function chg(typ){
if( typ == 1 ){
lineStr = "<INPUT type='text' name='In_Text' value='tst'>"
+ "<A href='javascript:chg(2)'>CLEAR</A>";
}else if( typ == 2 ){
lineStr = "<INPUT type=\"text\" name=\"In_Text\" value=\"\">"
+ "<A href=\"javascript:chg(1)\">SET</A>";
}
document.getElementById( 'TEST' ).innerHTML = lineStr;
}
//-->
</SCRIPT>
</HEAD>
<BODY>
<FORM name="MainForm" method="post">
<INPUT type="hidden" name="ChrSetChkStr" value="雀の往来">
<TABLE width="505" border="0" cellpadding="0" cellspacing="0">
<TR>
<TD ID="TEST">
<INPUT type="text" name="In_Text" value="">
<A href="javascript:chg(1)">SET</A>
</TD>
</TR>
</TABLE>
</FORM>
</BODY>
</HTML>
RTN_STR;
echo( $rtnStr );
?>
//
エスケープ内容(JavaScriptのtyp=2の記述部分で起こります。)
1 \ ⇒ "\" // 両サイドに『"』が付加されます
2 \ ⇒ "\?PHPSESSID=c4c8・・・" // 左側に『"』、右側に『?PHPSESSID=値"』が付加されます
1は<INPUT>タグ内で、最初に記述されている\記号に対して、エスケープされます。
例) lineStr = "<INPUT type="\""text\" name=\"In_Text\" value=\"\">"
~ ~
↑この部分
2は<A>タグ内の『href=』の中の\記号をエスケープしています。
例) + "<A href="\?PHPSESSID=値""javascript:chg(1)\">SET</A>";
~ ~~~~~~~~~~~~~~
↑この部分
以下の処理を行うと、エスケープは行われません
※typ==1の記載方法だと、エラーを回避することは可能です。
※JavaScriptエラーが表示されている時に、ブラウザの更新ボタンを押すとエスケープはされません。
※一度サンプルを表示した画面で、再度表示をすると、エスケープはされません。
※Session_Start()を行わない
実行環境1
PHP Version 4.2.3
Apache Version Apache/1.3.33
以上、宜しくお願い致します。
--------------------------------------
Start Yahoo! Auction now! Check out the cool campaign
http://pr.mail.yahoo.co.jp/auction/
PHP-users メーリングリストの案内