PHP kullanarak HTML ANSI çıkış sıralarını dönüştürme

2 Cevap php

Bu this one benzer bir sorudur. Ben HTML içine, özellikle renk, ANSI kaçış dizilerini dönüştürmek istiyorum. Ancak, bu PHP kullanarak gerçekleştirmek istiyoruz. Bunu orada herhangi kütüphaneler veya örnek kod var mı? Değilse, bana özel bir çözüm parçası yol alabilirsiniz bir şey?

2 Cevap

PHP böyle bir kütüphane bilmiyorum. : Sınırlı renklerle tutarlı bir girişi var Ama eğer kullanarak basit bir str_replace() bunu başarabilirsiniz

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

ANSI renk kodları, bir ESC [0m sıfırlama tüm bu tüm özelliklerini sıfırlamak için gereken, çünkü str_replace çözüm, renkler "iç içe" olduğu durumlarda işe yaramaz. HTML yaparken, SPAN kapanış etiketleri tam sayı gerekir.

"Iç içe" kullanım durumunda çalışan bir geçici çözüm aşağıdaki gibidir:

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

(Burada benim drush Terminal sorunu alınmıştır: http://drupal.org/node/709742)

Ben de kolayca yapmak için PHP kitaplığı için arıyorum.

P.S. PNG / görüntü ANSI kaçış dizilerini dönüştürmek istiyorsanız, kullanabileceğiniz AnsiLove.