终端应用程序上带有 readline 的奇怪字符

Strange char with readline on terminal app

我正在编写 php-console 应用程序,其中 readline 用于用户输入命令。

我是这样使用它的:

$input = readline("3$label3\n");

在 cmd 终端中看起来像这样:

但是在 vscode 中使用同一个终端,这个问号是不可见的。当我删除颜色代码 ("\033", "\033") 时,它们就会消失。

我也在 cygwin 终端测试了这个应用程序,问号不可见,但在这个地方有两个 space 符号。

求助。

您需要根据所使用的终端仿真器输出正确的控制代码。在 xterm 模拟器中有效的可能不适用于 vt100 或 Windows 使用的任何东西。

  1. 您可以使用函数stream_isatty(STDOUT)来检测输出是否为终端。
  2. 您可以参考常量 PHP_OS_FAMILY or PHP_OS 来检测您当前 运行 的 OS。
  3. 在 linux [或等效仿真器,如 cygwin] 上,您可以参考环境变量 $_ENV['TERM'] 以确定正在使用哪个终端仿真器。

根据这三条信息,您可以确定是否使用“花式”输出格式,并输出适合给定终端仿真器的控制代码。