转换ANSI转义序列为HTML使用PHP(Converting ANSI escape sequen

2019-08-03 16:03发布

这是一个类似的问题这一个 。 我想转换ANSI转义序列,尤其是颜色,转换成HTML。 不过,我想做到这一点使用PHP。 是否有任何库或示例代码在那里,这样做呢? 如果没有,任何可以让我的角色的方式来定制的解决方案?

Answer 1:

我不知道在PHP任何此类库。 但是,如果你有有限的颜色一致的输入,你可以用一个简单的完成它str_replace()

$dictionary = array(
    'ESC[01;34' => '<span style="color:blue">',
    'ESC[01;31' => '<span style="color:red">',
    'ESC[00m'   => '</span>' ,
);
$htmlString = str_replace(array_keys($dictionary), $dictionary, $shellString);


Answer 2:

该str_replace函数的解决方案将不会在颜色“嵌套”的情况下工作,因为在ANSI颜色代码,一个ESC [0米复位是所有的重置所有属性需要。 虽然在HTML中,你需要SPAN结束标记的确切数量。

时运作的“嵌套”的用例一种解决方法是如下:

  // Ugly hack to process the color codes
  // We need something like Perl's HTML::FromANSI
  // http://search.cpan.org/perldoc?HTML%3A%3AFromANSI
  // but for PHP
  // http://ansilove.sourceforge.net/ only converts to image :(
  // Technique below is from:
  // http://stackoverflow.com/questions/1375683/converting-ansi-escape-sequences-to-html-using-php/2233231
  $output = preg_replace("/\x1B\[31;40m(.*?)(\x1B\[0m)/", '<span style="color: red">$1</span>$2', $output);
  $output = preg_replace("/\x1B\[1m(.*?)(\x1B\[0m)/", '<b>$1</b>$2', $output);
  $output = preg_replace("/\x1B\[0m/", '', $output);

(从这里我Drush终端问题而采取: http://drupal.org/node/709742 )

我也期待为PHP库做到这一点很容易。

PS。如果您想ANSI转义序列转换成PNG /图像,你可以使用AnsiLove 。



Answer 3:

现在有库: ANSI-到HTML

而且很容易使用:

$converter = new AnsiToHtmlConverter();
$html = $converter->convert($ansi);


文章来源: Converting ANSI escape sequences to HTML using PHP