什么是\e的意图?

9
我对这个转义序列感到困惑。 PHP手册\e代表“转义”。 我在谷歌上搜到了关于ANSI转义序列的信息, 但我不知道\e是否指它们。
来自维基百科的解释:

ANSI转义序列是嵌入文本中的字符,用于控制视频文本终端上的格式、颜色和其他输出选项。

但我看不出这些转义序列和PHP如何交互。 我不知道所有发布的内容是否正确。
有人可以谈谈这个话题并展示一些例子吗?
3个回答

8

PHP不仅可以与Web服务器一起使用,PHP脚本也可以像这样从命令行运行:

$ php foo.php

如果要创建一个旨在从命令行运行的PHP脚本(例如与CakePHP一起提供的"cake"命令),当您想在终端仿真器中进行着色和格式设置时,\e非常有用。
您可以在此页面上找到更多有关这些转义序列的信息。

3
PHP中使用字符序列\e表示ASCII(以及UTF-8和其他ASCII兼容编码)中的ESC字符0x1B。使用可打印字符(在这种情况下是\e)来表示不可打印字符是有帮助的,因为用标准键盘输入这些字符并不容易(更不用说在屏幕上阅读它们)。这些序列通常称为“转义序列”。
您链接到的手册页面简单地说明:“如果您正在编写正则表达式并想匹配ESC字符,则可以使用\e进行匹配。其他\...序列类似地表示难以直接输入的字符和字符集。”
正如您发现的那样,ESC 有很多用途,其中包括 ANSI 转义序列,用于修改命令行程序的输出,通常用于添加颜色,例如 \e[...m,其中 ... 是一个或多个 选择图形渲染代码(在该页面上搜索“SRG”)。这不是 PHP 特有的;理解这些转义序列的是终端,而不是执行程序。任何输出兼容终端的适当字节序列的程序(使用任何语言编写)都将触发此行为。

您可以在 Bash 中轻松看到此行为,请尝试在终端中运行以下命令:

$ echo -e '\e[31mRED TEXT\e[m'
$ echo -e '\e[42mGREEN BACKGROUND\e[m'
$ echo -e '\e[5mBLINKING?\e[m'

大多数终端会将第一个命令的输出样式设置为红色,第二个命令的背景为绿色。然而,许多终端故意不支持闪烁文本,原因与HTML中的标签一样——它很烦人 :)。
不用说,术语“转义序列”在许多不同的上下文中都有不同的含义。但通常情况下,转义序列是一些特殊的字符序列,其具有除了字符本身以外的特定含义。

-1

有许多转义字符。

\b: 退格符
\n: 换行符
\r: 回车符
\e: 转义符
等等...

它们在输出时都会执行不同的操作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接