如何使用php解析bash颜色代码到HTML


how to go about parsing bash color codes to html with php

我正试图从日志和输出HTML中解析行,并希望颜色代码工作。

我在网上发现这个类应该工作,但它没有颜色,也没有删除控制代码。它应该用等效的HTML替换控制代码,但完全忽略它输出

[0;35;22m/plugins: [0;37;1mGets a list of plugins running on the server[m

这是类

<?php
 function bashColortoHtml($string) {
    $ret = false;
    if(!empty($string)) {
        $_colorPattern = array(
            '/''033'[1;33m(.*?)''033'[0m/s',
            '/''033'[0;31m(.*?)''033'[0m/s',
            '/''033'[0;34m(.*?)''033'[0m/s',
            '/''033'[0;36m(.*?)''033'[0m/s',
            '/''033'[0;35m(.*?)''033'[0m/s',
            '/''033'[0;33m(.*?)''033'[0m/s',
            '/''033'[1;37m(.*?)''033'[0m/s',
            '/''033'[0;30m(.*?)''033'[0m/s',
            '/''033'[0;32m(.*?)''033'[0m/s'
        );
        $_colorReplace = array(
            '<span class="yellow">$1</span>',
            '<span class="red">$1</span>',
            '<span class="blue">$1</span>',
            '<span class="cyan">$1</span>',
            '<span class="purple">$1</span>',
            '<span class="brown">$1</span>',
            '<span class="white">$1</span>',
            '<span class="black">$1</span>',
            '<span class="green">$1</span>'
        );
        $ret = preg_replace($_colorPattern, $_colorReplace, $string);
    }
    return $ret;
}
?>
<?php
$output = bashColortoHtml('[0;35;22m/plugins: [0;37;1mGets a list of plugins running on the server[m');
echo $output;
?>

这个类的问题是什么,或者是否有更好的方法使用php

我今天不得不解决同样的问题,并编写了这个简单明了的函数。请务必检查,如果它符合您的需求,您可能需要添加一些案例。

//
// Converts Bashoutput to colored HTML
//
function convertBash($code) {
    $dictionary = array(
        '[1;30m' => '<span style="color:black">',
        '[1;31m' => '<span style="color:red">', 
        '[1;32m' => '<span style="color:green">',   
        '[1;33m' => '<span style="color:yellow">',
        '[1;34m' => '<span style="color:blue">',
        '[1;35m' => '<span style="color:purple">',
        '[1;36m' => '<span style="color:cyan">',
        '[1;37m' => '<span style="color:white">',
        '[m'   => '</span>'
    );
    $htmlString = str_replace(array_keys($dictionary), $dictionary, $code);
    return $htmlString;
}

结合前面的答案并添加所有颜色,我发现它看起来像这样:

function bashColorToHtml($string) {
    $colors = [
        '/'[0;30m(.*?)'[0m/s' => '<span class="black">$1</span>',
        '/'[0;31m(.*?)'[0m/s' => '<span class="red">$1</span>',
        '/'[0;32m(.*?)'[0m/s' => '<span class="green">$1</span>',
        '/'[0;33m(.*?)'[0m/s' => '<span class="brown">$1</span>',
        '/'[0;34m(.*?)'[0m/s' => '<span class="blue">$1</span>',
        '/'[0;35m(.*?)'[0m/s' => '<span class="purple">$1</span>',
        '/'[0;36m(.*?)'[0m/s' => '<span class="cyan">$1</span>',
        '/'[0;37m(.*?)'[0m/s' => '<span class="light-gray">$1</span>',
        '/'[1;30m(.*?)'[0m/s' => '<span class="dark-gray">$1</span>',
        '/'[1;31m(.*?)'[0m/s' => '<span class="light-red">$1</span>',
        '/'[1;32m(.*?)'[0m/s' => '<span class="light-green">$1</span>',
        '/'[1;33m(.*?)'[0m/s' => '<span class="yellow">$1</span>',
        '/'[1;34m(.*?)'[0m/s' => '<span class="light-blue">$1</span>',
        '/'[1;35m(.*?)'[0m/s' => '<span class="light-purple">$1</span>',
        '/'[1;36m(.*?)'[0m/s' => '<span class="light-cyan">$1</span>',
        '/'[1;37m(.*?)'[0m/s' => '<span class="white">$1</span>',
    ];
    return preg_replace(array_keys($colors), $colors, $string);
}

要在html中显示颜色,必须在css中定义类或使用style属性。