2009-09-03 10 views
7

これはthis oneと同様の質問です。私はANSIのエスケープシーケンス、特に色のHTMLに変換したいと思います。しかし、私はPHPを使用してこれを達成したいと思います。これを行うライブラリやサンプルコードはありますか?そうでない場合は、私をカスタムソリューションに導くことができるものは何ですか?PHPを使用してANSIエスケープシーケンスをHTMLに変換する

答えて

3

私はこのようなライブラリをPHPで知りません。

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

私は本当に多くの一般的な解決策を探していますが、これは良いですし、私はこのルートを行くことになるかもしれません。 –

7

str_replaceソリューションが原因ANSIカラーコードで、色は「ネストされた」されている場合には動作しない、1:あなたは限られた色と一致した入力を持っている場合しかし、あなたはstr_replace()簡単な使用してそれを達成することができますESC [0mリセットはすべての属性をリセットするために必要なすべてです。 HTMLでは、SPAN終了タグの正確な数が必要です。

「ネストされた」ユースケースを働く回避策は以下の通りです:

私も実行するPHPライブラリを探しています:

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

http://drupal.org/node/709742がここに私のDrushターミナルの問題から撮影します)これは簡単です。

P.S. ANSIエスケープシーケンスをPNG /イメージに変換する場合は、AnsiLoveを使用できます。

2

ライブラリが存在することになります:ansi-to-html

そして非常に使いやすい:

$converter = new AnsiToHtmlConverter(); 
$html = $converter->convert($ansi); 
関連する問題