Pregunta

Esta es una pregunta similar a éste . Me gustaría convertir secuencias de escape ANSI, especialmente para el color, en páginas HTML. Sin embargo, me gustaría lograr esto usando PHP. ¿Hay algunas bibliotecas o código de ejemplo que hay que hacer esto? Si no es así, cualquier cosa que me puede conseguir parte del camino a una solución personalizada?

¿Fue útil?

Solución

No sé de cualquier librería en PHP. Pero si usted tiene una entrada consistente con colores limitados, se puede lograr utilizando un str_replace() simple:

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

Otros consejos

La solución str_replace no funcionaría en los casos en los colores están "anidados", ya que en los códigos de color ANSI, uno ESC [0m reinicio es todo lo que se necesita para restablecer todos los atributos. Mientras que en HTML, se necesita el número exacto de etiquetas de cierre SPAN.

Una solución que funciona el caso "anidada" uso es el siguiente:

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

(tomado de mi problema Drush Terminal aquí: http://drupal.org/node/709742 )

También estoy en busca de la librería PHP para hacer esto fácilmente.

P.S. Si desea convertir secuencias de escape ANSI PNG / imagen para, puede utilizar AnsiLove .

Hay biblioteca ahora: ANSI-a-html

Y muy fácil de usar:

$converter = new AnsiToHtmlConverter();
$html = $converter->convert($ansi);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top