Преобразование escape-последовательностей ANSI к HTML с помощью PHP

Начиная с (Уровня API 28) Android 9.0, поддержка открытого текста отключена по умолчанию. Опция 1 - Создает файл res/xml/network_security_config.xml -

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">Your URL(ex: 127.0.0.1)</domain>
    </domain-config>
</network-security-config>

AndroidManifest.xml -

<?xml version="1.0" encoding="utf-8"?>
<manifest ...>
    <uses-permission android:name="android.permission.INTERNET" />
    <application
        ...
        android:networkSecurityConfig="@xml/network_security_config"
        ...>
        ...
    </application>
</manifest>

Опция 2 - AndroidManifest.xml -

<?xml version="1.0" encoding="utf-8"?>
<manifest ...>
    <uses-permission android:name="android.permission.INTERNET" />
    <application
        ...
        android:usesCleartextTraffic="true"
        ...>
        ...
    </application>
</manifest>
7
задан Community 23 May 2017 в 12:24
поделиться

2 ответа

Я не знаю ни одной такой библиотеки в 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);
3
ответ дан 6 December 2019 в 15:24
поделиться

Решение str_replace не будет работать в случаях, когда цвета "вложены", потому что в цветовых кодах ANSI для сбросить все атрибуты. В HTML вам нужно точное количество закрывающих тегов SPAN.

Обходной путь, который работает для «вложенного» варианта использования, приведен ниже:

  // 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 Terminal здесь: http://drupal.org/node/709742 )

I Я также ищу библиотеку PHP, чтобы сделать это легко.

P.S. Если вы хотите преобразовать escape-последовательности ANSI в PNG / изображение, вы можете использовать AnsiLove .

8
ответ дан 6 December 2019 в 15:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: