2009-09-03 7 views

Antwort

3

Ich kenne keine solche Bibliothek in PHP. Aber wenn Sie eine konsistente Eingabe mit begrenzten Farben haben, können Sie es erreichen eine einfache str_replace() mit:

$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

ich wirklich für eine allgemeinere Lösung suchen, aber das ist gut, und ich kann diesen Weg am Ende gehen. –

7

Die str_replace Lösung würde in Fällen, die nicht arbeiten, in denen Farben „verschachtelt“ werden, weil in ANSI-Farbcodes, ein ESC [0m Reset ist alles was benötigt wird, um alle Attribute zurückzusetzen. In HTML benötigen Sie die genaue Anzahl der abschließenden SPAN-Tags.

Eine Abhilfe, die den "verschachtelten" Use Case funktioniert, ist unter:

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

(genommen von meiner Drush Terminal-Ausgabe hier: http://drupal.org/node/709742)

Ich bin auch für die PHP-Bibliothek suchen zu tun das leicht.

P.S. Wenn Sie ANSI-Escape-Sequenzen in PNG/Bild konvertieren möchten, können Sie AnsiLove verwenden.

2

Es gibt jetzt Bibliothek: ansi-to-html

Und sehr einfach zu bedienen:

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