我遇到了一个错误,在包含文件时 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 输入命令时,是什么导致它特别阻塞?
环境: 我在 OSX 上的 iTerm 中运行 PHP 7.0,但在本机终端和 zsh 中的测试也失败了。
我已经研究过这个问题并排除了以下所有情况
\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;
无论如何都会产生相同的结果: