Экранирование одинарной кавычки в PHP - PullRequest
0 голосов
/ 13 апреля 2011

У меня есть страница администратора, которая обрабатывает добавление товара. Я использовал mysql_real_escape_string для защиты своей базы данных от ненужных символов. Но когда я получаю эти данные из базы данных (например, название продукта с одинарной кавычкой, например, поле Дейва), у меня была ошибка при отображении их на моей странице в атрибуте onclick.

Я использовал этот код для отображения кода продукта.

echo "<li onClick='fill(\"$productName\")'><strong>".stripslashes($row['name'])."</strong> by ".stripslashes($row['brand'])."</li>";

Ответы [ 4 ]

1 голос
/ 15 апреля 2011

Чтобы перечислить другие ответы:

  • используйте json_encode для правильного кодирования значения $productName в виде строки JavaScript и
  • используйте htmlspecialchars со стилем кавычек ENT_QUOTES , чтобы правильно его кодировать для использования в качестве значения атрибута HTML в одинарных кавычках.

Итак:

echo "<li onClick='" . htmlspecialchars('fill('.json_encode($productName).')', ENT_QUOTES) . "'><strong>" . htmlspecialchars(stripslashes($row['name'])) . "</strong> by " . htmlspecialchars(stripslashes($row['brand'])) . "</li>";
1 голос
/ 13 апреля 2011

Вы должны защитить свой код от кавычек, dbl-кавычек и HTML-тегов. Для этого используйте PHP htmlspecialchars() с установленным ENT_QUOTES. Пример:

 htmlspecialchars($row['name'], ENT_QUOTES);
1 голос
/ 14 апреля 2011

Используйте json_encode для названия продукта в вызове функции javascript и htmlspecialchars для обычного вывода HTML.

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

Вам нужно использовать addlashes () и, возможно, htmlentities () в зависимости от типа допустимых названий продуктов, которые вы разрешаете.

http://php.net/manual/en/function.addslashes.php

http://php.net/manual/en/function.htmlentities.php

...