Передать строку в функцию Javascript все в PHP - Как правильно избежать?

У меня есть следующий код:

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."'";
}

1 ответ

Решение

Вы должны сначала избежать этого:

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

json_encode() превращает его в действительную строку JS, затем HtmlSpecialChars() экранирует его для использования в атрибуте HTML.

Если у вас старая версия PHP без json_encode(), используйте вместо этого:

$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>';
Другие вопросы по тегам