2012-04-05 13 views
0

は、私は、次のコードを持っている:PHPでJavascript関数に文字列を渡す - 正しくエスケープするには?

echo ' 
    <td>  
     <input type="button" name="delete" value="X" onclick="clearSelection(this.form, '.$type.');this.form.submit();" /> 
    </td>' 
; 

問題は$typeニーズがカッコ内にあることをので、私は、clearSelection() JavaScript関数に文字列を渡すことができないということです。

私はバックスラッシュ、u0222、複数引用符などで試しましたが、何も解決策には至りませんでした。

ソリューション:あなたが最初にそれをエスケープする必要があり

$type = json_escape_string($type); 
$raw_text = "clearSelection(this.form, $type); this.form.submit();"; 
$escaped_text = htmlspecialchars($raw_text); 
echo '<td><input type="button" name="delete" value="X" onclick="'.$escaped_text.'" /></td>'; 

function json_escape_string($str){ 
    $str = strtr($str, array('\\'=>'\\\\',"'"=>"\\'",'"'=>'\\"',"\r"=>'\\r',"\n"=>'\\n','</'=>'<\/')); 
    return "'".$str."'"; 
} 

答えて

3

$escaped_text = HtmlSpecialChars(json_encode($raw_text)); 

json_encode()が有効なJS文字列に変換しますが、その後、HtmlSpecialChars()は、HTML属性内で使用するためにそれをエスケープします。あなたは)json_encode(なしのPHPの古いバージョンをお持ちの場合は

、代わりにこれを使用する:

$escaped_text = HtmlSpecialChars(json_escape_string($raw_text)); 

function json_escape_string($str){ 
    $str = strtr($str, array('\\'=>'\\\\',"'"=>"\\'",'"'=>'\\"',"\r"=>'\\r',"\n"=>'\\n','</'=>'<\/')); 
    return "'".$str."'"; 
} 

をあなたの特定の変数の場合:

$escaped_type = HtmlSpecialChars(json_escape_string($type)); 
echo '<td><input type="button" name="delete" value="X" onclick="clearSelection(this.form, '.$escaped_type.'); this.form.submit();" /></td>'; 
+0

は 'json_encodeは()'は何でない場合利用可能ですか? '未定義関数json_encode()'を呼び出します。 PHP v。5.2.9。 OK、それは 'json_encode()'なしで動作するようです。 – testing

+0

代替関数を使って答えを更新 – Cal

+0

私はあなたの関数を使うと '' clearSelection(this.form、\ 'products \'); onclick属性( 'onlick =" "')のthis.form.submit(); ''それはうまくいかないようです。 – testing

関連する問題