簡體   English   中英

使用PHP將ANSI轉義序列轉換為HTML

[英]Converting ANSI escape sequences to HTML using PHP

這是一個類似的問題這一個 我想將ANSI轉義序列(特別是顏色)轉換為HTML。 但是,我想用PHP完成這個。 是否有任何庫或示例代碼可以執行此操作? 如果沒有,任何可以讓我參與自定義解決方案的東西?

str_replace解決方案在顏色“嵌套”的情況下不起作用,因為在ANSI顏色代碼中,一個ESC [0m重置是重置所有屬性所需的全部。 在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 Terminal問題: http//drupal.org/node/709742

我也在尋找PHP庫來輕松完成這項工作。

PS如果要將ANSI轉義序列轉換為PNG /圖像,可以使用AnsiLove

我不知道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);

現在有圖書館: ansi-to-html

而且非常容易使用:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM