使用PHP格式化HTML代码以纯文本输出[重复]

Posted

技术标签:

【中文标题】使用PHP格式化HTML代码以纯文本输出[重复]【英文标题】:Formatting HTML code to be output in plain text, with PHP [duplicate] 【发布时间】:2011-03-27 18:45:03 【问题描述】:

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

function Code($code)

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

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

谢谢!

杰克

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

function Code($code)

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

正如你所看到的,我在这一切上都使用了highlight_string()。但是,输出根本没有突出显示,而是作为字符实体输出(&amp;lt;、'>' 等)。如果我将函数排序改组为:

return "&lt;pre&gt;&lt;code&gt;".nl2br(htmlspecialchars(highlight_string($code)))."&lt;/code&gt;&lt;/pre&gt;";

我发现字符实体没有输出,但字符串仍然没有突出显示。澄清一下,我也没有会影响应用的文本颜色的 CSS 格式。另外,我检查了我的 php 设置,其中肯定有指定的突出显示颜色。

【问题讨论】:

【参考方案1】:

不,没关系。 htmlspecialchars() 会将任何 HTML 控制字符转换为其实体等效项(&amp;lt; => &amp;lt; 等),没有办法在那里注入任何东西。

【讨论】:

太好了,谢谢!我也为这个问题添加了一些额外的内容...... :) @Jack highlight_string() 不起作用,因为您在 precode 块内。它们不支持 HTML 格式。 我将 Code() 函数更改为:return "".nl2br(htmlspecialchars(highlight_string($code))).""; - 遗憾的是,它仍然不起作用。我也尝试过“改组”highlight_string() 函数的深度(例如,把它放在前面),但没有运气。也有不寻常的 '1' 被输出,见截图:cl.ly/603f491d7402e06125be - 它们肯定不在数据库数据中。 @Jack highlight_string 函数必须是最外层的函数,正如您在问题示例中所使用的那样。 我非常感谢@Pekka 的帮助,但是当我尝试这是输出时:cl.ly/5df1ec7621b4d6984686 - 之后又是一个神秘的“1”......

以上是关于使用PHP格式化HTML代码以纯文本输出[重复]的主要内容,如果未能解决你的问题,请参考以下文章

求一串完整的php代码+html php随机生成10位数字,而且永远不会重复,在一个单行文本框内输出

无法以纯文本格式读取文件

将密码以纯文本形式存储在 php 变量或 php 常量中是不是可以?

使用php删除内联样式[重复]

php基础

PHP使用前的了解