2009-09-03 8 views

Répondre

3

Je ne connais aucune bibliothèque de ce type en PHP. Mais si vous avez une entrée compatible avec les couleurs limitées, vous pouvez accomplir à l'aide d'un simple 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

Je cherche vraiment une solution plus générale, mais cela est bon et je pourrais finir par aller dans cette voie. –

7

La solution str_replace ne fonctionnerait pas dans les cas où les couleurs sont « imbriquées », parce que dans les codes couleurs ANSI, un ESC [0m reset est tout ce qui est nécessaire pour réinitialiser tous les attributs. En HTML, vous avez besoin du nombre exact de balises de fermeture SPAN.

Une solution qui fonctionne le « imbriquée » cas d'utilisation est ci-dessous:

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

(tiré de mon problème Drush Terminal ici: http://drupal.org/node/709742)

Je suis aussi à la recherche de la bibliothèque PHP pour faire ceci facilement.

P.S. Si vous voulez convertir des séquences d'échappement ANSI en PNG/image, vous pouvez utiliser AnsiLove.

2

Il y a maintenant la bibliothèque: ansi-to-html

et très facile à utiliser:

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