Frage

Dies ist eine ähnliche Frage auf dieses . Ich mag ANSI-Escape-Sequenzen konvertieren, vor allem für Farbe, in HTML. Ich möchte jedoch diese mit PHP erreichen. Gibt es Bibliotheken oder Beispielcode gibt, die das tun? Wenn nicht, irgendetwas, das mich teilweise an eine benutzerdefinierte Lösung bekommen?

War es hilfreich?

Lösung

Ich weiß nicht, von einer solchen Bibliothek in PHP. Aber wenn Sie eine konsistente Eingabe mit begrenzten Farben haben, können Sie erreichen es ein einfaches 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);

Andere Tipps

Die str_replace Lösung nicht funktionieren würde in Fällen, in denen Farben „verschachtelt“ werden, weil in ANSI-Farbcodes, ein ESC [0m zurückgesetzt alle sind, die alle Attribute zurückgesetzt benötigt wird. Während in HTML, müssen Sie die genaue Anzahl der SPAN Endtags.

Eine Abhilfe, die funktioniert der "verschachtelte" Use Case 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);

(aus meinem Drush Terminal-Problem hier: http://drupal.org/node/709742 )

Ich bin auch für die PHP-Bibliothek suche dies leicht zu tun.

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

Es Bibliothek ist jetzt: ansi-to-html

Und sehr einfach zu bedienen:

$converter = new AnsiToHtmlConverter();
$html = $converter->convert($ansi);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top