Как избежать кавычек и уже экранированных кавычек в PHP перед переходом на Javascript? - PullRequest
1 голос
/ 13 апреля 2011

Есть много вопросов об избежании одинарных и двойных кавычек, но мне не повезло найти ответ, который решает мою конкретную проблему.

У меня есть функция PHP, которая динамически возвращает изображение с событием onClick, которое вызывает функцию Javascript с именем объекта в качестве аргумента, например:

$response = "<img src=\"images/action_delete.gif\" onClick=\"confirmDelete("'" . $event->getName() . "'")\"/>"";

Функция Javascript должна отображать диалог подтверждения в какой-то момент, подобный этому:

confirm('Delete event ' + name + ' ?')

Как мне отформатировать $ response в PHP, чтобы убедиться, что подтверждение Javascript не запутается, когда пользователь вводит имя, содержащее 'или "или \' или \"?

Ответы [ 4 ]

8 голосов
/ 13 апреля 2011

Вы можете избежать любых кавычек в php, используя htmlspecialchars или htmlentities, однако это не решает проблему одинарных кавычек, даже если установлен ENT_QUOTES.

Проведя небольшое тестирование, я вижу, что должно работать следующее, хотя это может быть не очень элегантно:

$name = htmlentities(str_replace("'", "\'", $event->getName()));
$response = "<img src=\"images/action_delete.gif\" onClick=\"confirmDelete('" . $name . "')\"/>";

Надеюсь, что помогает

2 голосов
/ 13 апреля 2011

Очень безопасная альтернатива, которая также дает вам курсор в виде руки бесплатно

<script> 
function confirmDelete(idx) {
  if (confirm(document.getElementById("msg"+idx).innerHTML)) {
    location="delete.php?idx="+idx;   
  }   
  return false 
}
<span id="msg1" style="display:none"><?PHP echo $event->getName(); ?></span> 
<a href="#" onClick="return confirmDelete(1)"><img src="images/action_delete.gif" style="border:0" /></a>
2 голосов
/ 13 апреля 2011

Обработать строку, используя json_encode().Это обеспечит правильное выражение JavaScript.

0 голосов
/ 15 марта 2014

Другое решение сработало для меня, если у вас есть одинарные кавычки, двойные кавычки, косая черта и обратный слеш во входной строке:

$output = htmlentities(str_replace(array(chr(92), "'"), array(chr(92) . chr(92), "\'"), $input));

с чем-то вроде:

 onClick=\"confirmDelete('" . $output . "')\"

БлагодаряНикя!

...