Странная ошибка, когда PHP не отображает цвета ANSI при отражении от файлов в OSX

Я столкнулся с ошибкой, из-за которой цвета ANSI не отображаются при включении файла.

Следующая команда bash работает как положено (прямой bash):

echo -e "\033[31m some colored text \033[0m some white text" # Bash command displays fine

Следующая команда, запускаемая из командной строки, также работает нормально (интерпретатор php, прямой ввод команды через cli):

php -r 'echo "\033[31m some colored text \033[0m some white text \n";' # PHP from console displays fine

Включение файла не работает.

Содержание тестового файла:

<?php
//fails
$test = '"\033[31m some colored text \033[0m some white text \n"';
echo $test;
//escaped backslashes, also fails
$test = '"\\033[31m some colored text \\033[0m some white text \n"';
echo $test;

Включая такой файл из командной строки:

php index.php

Или включая это из командной строки:

php -f index.php

Всегда производит это:

"\033[31m some colored text \033[0m some white text \n""\033[31m some colored text \033[0m some white text \n"

Ни разрывы строк, ни цвета консоли не отображаются должным образом. Что является причиной того, что это задыхается конкретно, когда файл запускается, а не вводится непосредственно командой, либо из bash, либо из PHP в командной строке?


Env:
Я использую PHP 7.0 в iTerm на OSX, но тестирование на нативном терминале и zsh также не удается.

Screencap изображен для целей визуализации


Я уже исследовал эту проблему и исключил все следующие

  • Это OSX, а не Windows. известная ошибка Windows с цветами ANSI не актуально.
  • Это не проблема с моей консолью. Цвета отображаются как в BASH, так и в PHP, которые выполняются из командной строки.
  • Это не проблема с префиксом escape. В моей системе \e, \033, а также \x1B все отображаются правильно. Все они были предприняты, и ни один из них не имеет никакого значения.
  • Это не проблема с косой чертой без экранирования. Данный пример демонстрирует оба \033[ а также \\033[ терпит неудачу.

Редактировать:

Как отмечалось в некоторых комментариях, вышеприведенное указывается в двойных кавычках Одинарные кавычки также не работают, хотя другие пользователи указывают, что это работает для них, что заставляет меня полагать, что это какая-то таинственная проблема неправильной конфигурации, а не строгая проблема языка PHP. Обновленный источник по запросу:

<?php
//fails
$test = "\033[31m some colored text \033[0m some white text \n";
echo $test;
//escaped backslashes, also fails
$test = "\\033[31m some colored text \\033[0m some white text \n";
echo $test;

В любом случае дает одинаковые результаты:

Пересмотренный экран

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …