奇怪的错误,当从 OSX 上的文件回显时,PHP 不会显示 ANSI 颜色

问题描述 投票:0回答:0

我遇到了一个错误,在包含文件时 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 中的测试也失败了。


我已经研究过这个问题并排除了以下所有情况


编辑:

正如一些评论所指出的,上面是双引号。单引号也不起作用,尽管其他用户表示它对他们有用,这让我相信这是某种神秘的错误配置问题,而不是严格的 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;

无论如何都会产生相同的结果:

php colors command-line-interface ansi-escape
© www.soinside.com 2019 - 2024. All rights reserved.