使用PHP格式化以纯文本格式输出的HTML代码

时间:2010-08-10 11:34:06

标签: php htmlspecialchars

我有这个函数从数据库中获取一些用户提交的HTML代码:

function Code($code)
{
    return "<pre><code>".nl2br(htmlspecialchars($code))."</code></pre>";
}

我会像echo code($query->row('html'));那样称呼它。我知道我的问题缺乏“深度”,但这是最好的方法吗?或者可以解析输出的格式(例如Javascript注入),还是在某些机器上输出不正确等?

谢谢!

杰克

编辑:我有一个新的(相关)问题:我想使用highlight_string()突出显示该字符串。但是,我无法使其正常工作。我我理解为什么,但我不太确定如何纠正这个问题。

function Code($code)
{
    return "<pre><code>".highlight_string(nl2br(htmlspecialchars($code)))."</code></pre>";
}

正如您所看到的那样,我正在使用highlight_string()。但是,输出根本不会突出显示,而是输出为字符实体(&lt;,'&gt;'等)。如果我将函数排序改组为:

return "<pre><code>".nl2br(htmlspecialchars(highlight_string($code)))."</code></pre>";

我发现没有输出字符实体,但字符串仍未突出显示。为了澄清,我没有CSS格式会影响应用的文本颜色。此外,我已经检查了我的PHP设置,并且肯定会突出显示那里指定的颜色。

1 个答案:

答案 0 :(得分:3)

不,没关系,没关系。 htmlspecialchars()会将任何HTML控件字符转换为等效的实体(< =&gt; &lt;等),无法在那里注入任何内容。