2009-09-03 3 views

risposta

3

Non conosco alcuna libreria di questo tipo in PHP. Ma se si dispone di un ingresso in linea con i colori limitati, si può realizzare utilizzando un semplice 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); 
+0

Sto davvero cercando una soluzione più generale, ma questo è buono e io possa finire per andare in questo percorso. –

7

La soluzione str_replace non avrebbe funzionato nei casi in cui i colori sono "annidati", perché in codici colore ANSI, uno ESC [0m reset è tutto ciò che è necessario per ripristinare tutti gli attributi. In HTML, è necessario il numero esatto dei tag di chiusura SPAN.

Una soluzione che funziona "annidata" caso d'uso è di seguito:

// 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); 

(preso dal mio problema Drush Terminal qui: http://drupal.org/node/709742)

Sto anche cercando la libreria PHP per farlo questo facilmente.

P.S. Se si desidera convertire sequenze di escape ANSI in PNG/immagine, è possibile utilizzare AnsiLove.

2

ci sono biblioteca ora: ansi-to-html

e molto facile da usare:

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