如何在没有被识别为代码的情况下在PHP中显示<something>?</something>

时间:2014-06-20 13:58:18

标签: php html

我正在为我的Minecraft服务器开发一个基于Web的管理器。我已经到了我从服务器日志文件输出行的地步。

我的问题是,每当玩家说出他们的名字时,文字会像<playername> hello world一样显示在日志中,但是当它传递给html时,它会将其识别为标签,因此不会打印到日志div中。< / p>

我目前的代码如下

<?php

// Parses text with control codes and returns HTML
function mclogparse($str) {

// Prevent HTML interpretation
$str = '<span id="mclogparse">'.htmlspecialchars($str);
// Colors
$fgColors = array(
    30 => 'black',
    31 => 'red',
    32 => 'green',
    33 => 'yellow',
    34 => '#0055ff', // blue
    35 => 'magenta',
    36 => 'cyan',
    37 => 'white'
);

// Replace color codes
foreach(array_keys($fgColors) as $color)
    //$str = preg_replace("/\x1B\[".$color.';(1m|22m)/','</span><span          style="color: '.$fgColors[$color].';">',$str);

// Replace "default" codes with closing span
$str = preg_replace("/\x1B\[(0;39|0;49)?m/",'</span>', $str);

// Color message types
$str = strtr($str,array(
    '[INFO]' => '[<span style="color: #77ccff;">INFO</span>]',
    '[WARNING]' => '[<span style="color: yellow;">WARNING</span>]',
    '[SEVERE]' => '[<span style="color: red;">SEVERE</span>]'
));

return $str;

}

// Strips control codes from log
function mclogclean($str) {
$str = preg_replace("/\x1B\[([0-9]+;([0-9]+;)?(1|22))?m/", "", $str);
return $str;
}

此代码阻止它被识别为标记但也使该行显示为hello world 而不是playername helloworld

有没有办法让它打印为playername:message?

1 个答案:

答案 0 :(得分:3)

您可以使用&lt;的{​​{1}}和<的{​​{1}}来转义您的代码,因此浏览器不会将其解释为HTML。

如果数据已经存在,您可以在功能开始时运行:

&gt;

您还可以使用htmlspecialchars来防止解释任何 html 字符:

>

如果你只想让你的字符串按原样显示,这是最好的方法。