Question

Ceci est une question similaire à celui-ci . Je voudrais convertir des séquences d'échappement ANSI, en particulier pour la couleur, en HTML. Cependant, je voudrais y parvenir en utilisant PHP. Y at-il des bibliothèques ou code d'exemple là-bas qui font cela? Dans le cas contraire, tout ce qui peut me faire en partie à une solution personnalisée?

Était-ce utile?

La solution

Je ne sais pas d'une telle bibliothèque 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);

Autres conseils

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 [reset est 0m tout ce qui est nécessaire pour réinitialiser tous les attributs. Alors que dans HTML, vous devez le nombre exact de balises de fermeture SPAN.

Une solution qui fonctionne le cas d'utilisation « imbriquée » 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);

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

Je cherche aussi pour la bibliothèque PHP pour le faire facilement.

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

Il y a maintenant la bibliothèque: ansi à html

Et très facile à utiliser:

$converter = new AnsiToHtmlConverter();
$html = $converter->convert($ansi);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top