1

私は次のコードを持っています:

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

問題は、括弧で囲む必要があるclearSelection()ため、Javascript関数に文字列を渡すことができないことです。$type

バックスラッシュ、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."'";
}
4

1 に答える 1

4

最初にそれをエスケープする必要があります:

$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>';
于 2012-04-05T18:11:40.497 に答える