更改命令提示符上 php 输出的文本颜色?

更改命令提示符上 php 输出的文本颜色?

假设我有一个php文件,我想更改基于控制台的应用程序输出的文本颜色......

<?php
$prompt = "What Is Your Name: ";
echo $prompt;
$answer =  "You Entered: " . rtrim( fgets( STDIN ));
echo $answer;
?>

我想改变的文字颜色$answer

有可能吗?如果可以,我该怎么做?

答案1

这当然是可能的ANSI 转义代码

<?php
echo "\033[31m some colored text \033[0m some white text \n";
?>

将以红色输出“一些彩色文本”并以白色输出“一些白色文本”(除非您为终端选择了不同的默认颜色)。

字符\033表示转义代码的开始。[31m颜色为红色。[0m表示编码片段的结束。有关更多颜色,请参阅这里

对于其他效果,例如粗体:

\033[1m bold text \033[0m

参见第一个链接。你可以在命令行中尝试这些代码,具体操作如下:

echo -e "\033[1m bold text \033[0m"

答案2

现在您可以在 Ubuntu 16.04 的终端中使用 24 位真彩色

在此处输入图片描述

  • 前台转义序列是^[38;2;<red>;<green>;<blue>m
  • 后台转义序列是^[48;2;<red>;<green>;<blue>m
  • <red> <green> <blue>范围从 0 到 255(含)。
  • 转义序列^[0m将输出返回为默认值。

查看 RGB 颜色代码图表

演示脚本中的 24 位真彩色

在此处输入图片描述

这是产生彩色输出的修改后的脚本。

<?php
$prompt = "What Is Your Name: ";
echo $prompt;
$answer =  rtrim( fgets( STDIN ));
echo "\033[38;2;0;102;0m You \033[38;2;255;0;255m Entered: \033[38;2;255;255;0m $answer \033[0m \n";
?>

上述脚本的示例输出:

示例输出

答案3

您应该使用 PHP 之类的库,而不是硬编码序列内核这将更有可能在更多终端类型上运行

来自的示例ncurses_color_set

<?php
ncurses_init();

// If the terminal supports colors, initialize and set active color
if (ncurses_has_colors()) {
    ncurses_start_color();
    ncurses_init_pair(1, NCURSES_COLOR_YELLOW, NCURSES_COLOR_BLUE);
    ncurses_color_set(1);
}

// Write a string at specified location
ncurses_mvaddstr(10, 10, "Hello world! Yellow on blue text!");

// Flush output to screen
ncurses_refresh();

ncurses_end();
?>

ncurses_has_colors

检查终端是否具有颜色功能。此函数可用于编写终端独立程式。

[重点是我的]

使用ncurses_attr(NCURSES_A_BOLD);粗体。请注意,此功能和相关功能均标记为实验性的。

ncurses_attron

警告此功能是实验。此函数的行为、其名称和相关文档可能会在 PHP 的未来版本中发生变化,恕不另行通知。使用此函数时,风险自负。

警告此函数目前没有记录;只有其参数列表可用。

[强调他们的]

您可能会发现其他库。您应该检查以确保它们使用独立于终端的技术。我发现有几个库使用硬编码序列。

请注意,命令行 (shell) 等效用法tput是为了与终端无关。我将此信息作为参考起点。应避免使用它们。

相关内容