htmlspecialchars和json编码问题

时间:2008-12-17 10:15:46

标签: php javascript ajax

我正在尝试格式化一些糟糕的html输出到弹出窗口。 html存储在mysql数据库的一个字段中。

我一直在php中的行上执行json_encode和htmlspecialchars,如下所示:

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

并调用我的makewindows函数,它只是将html作为参数并使用withdocument.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 个答案:

答案 0 :(得分:1)

你不应该在函数调用中使用单引号。它应该是这样的:

<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>

这是正确的。

答案 1 :(得分:0)

尝试以下方式:

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

我认为单引号默认不会转义。 不过我建议您在打开窗口之前将html保存在JavaScript变量中。