2008-12-17 76 views
2

我想格式化一些错误的html输出到弹出窗口。 html存储在mysql数据库的一个字段中。htmlspecialchars和json编码问题

我已经在该行中的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数据,则不会创建任何弹出窗口。我收到萤火虫的误差后的参数列表

缺失)然而,HTML是我无法控制的。

从我读过的内容,我正在采取正确的步骤。如果我错过了一些东西,它是什么?

我全使Windows功能:

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

当我编写PHP并且必须编写我自己的自定义分析器来解析(或剥离)特殊字符时,`htmlentities`和`htmlspecialcharacters`非常令人沮丧。你可以设置你的数据库表,只允许某个字符集或在插入前验证数据吗? – rxgx 2011-01-04 10:09:59

回答

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> 

这是正确的。

0

试试以下的方法:

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

我觉得单引号默认情况下不逃脱。尽管如此,我仍然建议您在打开窗口之前将html保存在JavaScript变量中。