سؤال

هذا سؤال مشابه ل هذا. أود تحويل تسلسل ANSI Escape ، وخاصة للألوان ، إلى HTML. ومع ذلك ، أود أن أنجز هذا باستخدام PHP. هل هناك أي مكتب أو رمز مثال يقوم بذلك؟ إذا لم يكن الأمر كذلك ، أي شيء يمكن أن يجعلني جزءًا من حل مخصص؟

هل كانت مفيدة؟

المحلول

لا أعرف أي مكتبة من هذا القبيل في PHP. ولكن إذا كان لديك مدخلات متسقة بألوان محدودة ، فيمكنك إنجازها باستخدام بسيط 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);

نصائح أخرى

لن يعمل حل Str_replace في الحالات التي تكون فيها الألوان "متداخلة" ، لأنه في رموز الألوان ANSI ، فإن إعادة تعيين ESC [0M هو كل ما هو مطلوب لإعادة ضبط جميع السمات. أثناء تواجدك في HTML ، تحتاج إلى العدد الدقيق لعلامات الإغلاق.

إن الحل البديل الذي يعمل في حالة استخدام "المتداخلة" أدناه:

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

(مأخوذة من قضية طرفي Drush هنا: http://drupal.org/node/709742 )

أنا أبحث أيضًا عن مكتبة PHP للقيام بذلك بسهولة.

ملاحظة: إذا كنت ترغب في تحويل تسلسل ANSI Escape إلى PNG/Image ، يمكنك استخدامه Ansilove.

هناك مكتبة الآن: ANSI إلى HTML

وسهل الاستخدام للغاية:

$converter = new AnsiToHtmlConverter();
$html = $converter->convert($ansi);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top