我有这个函数从数据库中获取一些用户提交的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()
。但是,输出根本不会突出显示,而是输出为字符实体(<
,'&gt;'等)。如果我将函数排序改组为:
return "<pre><code>".nl2br(htmlspecialchars(highlight_string($code)))."</code></pre>";
我发现没有输出字符实体,但字符串仍未突出显示。为了澄清,我没有CSS格式会影响应用的文本颜色。此外,我已经检查了我的PHP设置,并且肯定会突出显示那里指定的颜色。
答案 0 :(得分:3)
htmlspecialchars()
会将任何HTML控件字符转换为等效的实体(<
=&gt; <
等),无法在那里注入任何内容。