htmlspecialchars и json кодируют проблему - PullRequest
2 голосов
/ 17 декабря 2008

Я пытаюсь отформатировать плохой HTML для вывода в всплывающее окно. HTML хранится в поле в базе данных MySQL.

Я выполняю json_encode и htmlspecialchars в строке в php следующим образом:

$html = htmlentities(json_encode($row2['ARTICLE_DESC']));

и вызывая мою функцию makewindows, которая просто принимает html в качестве параметра и использует его сdocument.write следующим образом:

  <p><a href='#' onclick=\"makewindows('".$html."'); return false;\">Click for full description </a></p>

Это работает нормально, так как в некотором html-коде создается, например, следующее:

http://www.nomorepasting.com/getpaste.php?pasteid=22823&seen=true&wrap=on&langoverride=html4strict

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

Проблема в том, что htmlspecialchars, похоже, не удаляет плохие HTML-данные, так как всплывающее окно не создается. Я получаю ошибку с firebug

отсутствует) после списка аргументов

Однако html находится вне моего контроля.

Из того, что я прочитал, я делаю правильные шаги. Если я что-то упустил, что это?

Функция полного создания окон:

function makewindows(html){
child1 = window.open ("about:blank");
child1.document.write(html);
child1.document.close(); 
}

Ответы [ 2 ]

1 голос
/ 17 декабря 2008

Вы не должны иметь одинарные кавычки в вызове функции. Это должно выглядеть так:

<p><a href='#' onclick=\"makewindows(" . $html . "); return false;\">Click for full description </a></p>

Тогда результат будет выглядеть как

<p><a href='#' onclick="makewindows(&quot;.....&quot;); return false;">Click for full description </a></p>

что правильно.

0 голосов
/ 17 декабря 2008

Попробуйте следующим образом:

$html = htmlentities(json_encode($row2['ARTICLE_DESC']),ENT_QUOTES);

Я думаю, что одинарные кавычки по умолчанию не экранированы. Тем не менее, я рекомендую вам сохранить HTML в переменной JavaScript перед открытием окна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...