Domanda

Questa è una domanda simile a questo . Vorrei convertire sequenze di escape ANSI, in particolare per il colore, in HTML. Tuttavia, vorrei per raggiungere questo obiettivo utilizzando PHP. Ci sono delle librerie o codice di esempio là fuori che fare questo? In caso contrario, tutto ciò che mi può ottenere modo parte per una soluzione personalizzata?

È stato utile?

Soluzione

Non so di qualsiasi libreria 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);

Altri suggerimenti

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

Una soluzione che funziona "annidata" caso d'uso è inferiore a:

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

Sono anche alla ricerca per la libreria PHP per farlo facilmente.

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

Ci sono biblioteca ora: ANSI-to-HTML

E molto facile da usare:

$converter = new AnsiToHtmlConverter();
$html = $converter->convert($ansi);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top