在字符串

时间:2016-07-15 20:38:02

标签: php

tl; dr如何在PHP中编写strpos($haystack, '^[[H^[[2J')

一个linux命令行应用程序提供一个屏幕上的数据,然后是一个控制台转义码,以便在常规循环中将光标返回到“home”位置。为了访问数据,我将输出传送到我自己的脚本,如下所示:

$ ./otherapp | php myscript.php

这是一个连续的数据流,因此我使用this example for non-blocking stream consumption

现在解码输出我需要抓取一个完整的帧/屏幕数据。转义码以纳米为^[[H^[[2J显示。最简单的方法似乎是检测这些转义码并使用它们之间的输出。

如何在PHP字符串中表示转义码?我可以使用strpos(或等效的mbstring)来检测它们的位置吗?

1 个答案:

答案 0 :(得分:1)

您似乎是在Unix环境中。要实现转义码的功能,您可以尝试使用echo -en "\033[H"echo -en "\033[2J",因此我猜您应该尝试strpos('\033[H\033[2J', $haystack)之类的内容。

也许您需要添加额外的反斜杠('\\\033[H\\\033{2J')。

由于\033表示"八进制值为33"的字节,即ESC,这应该有效:

strpos("\e[H\e[2J", $haystack)

如果希望PHP解释特殊字符的转义序列,则需要将其括在双引号(")中。