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)来检测它们的位置吗?
答案 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解释特殊字符的转义序列,则需要将其括在双引号("
)中。