我正在为我的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?
答案 0 :(得分:3)
您可以使用<
的{{1}}和<
的{{1}}来转义您的代码,因此浏览器不会将其解释为HTML。
如果数据已经存在,您可以在功能开始时运行:
>
您还可以使用htmlspecialchars来防止解释任何 html 字符:
>
如果你只想让你的字符串按原样显示,这是最好的方法。