Php 相同的字节序列如何根据所使用的命令和某些未知上下文显示不同?

Php 相同的字节序列如何根据所使用的命令和某些未知上下文显示不同?,php,bash,unicode,terminal,mintty,Php,Bash,Unicode,Terminal,Mintty,我有两个命令,它们都输出相同的字节序列: $ echo $'\360\237\230\207' 2>&1|xxd -p f09f98870a $ php -r 'echo $argv[1]."\n";' $'\360\237\230\207' 2>&1|xxd -p f09f98870a 完全相同的字节,所以当我将它们打印到终端时,它们要么都成功,要么都失败 $echo$'\360\237\230\207'2>&1 | xxd-p | xxd-

我有两个命令,它们都输出相同的字节序列:

$ echo $'\360\237\230\207' 2>&1|xxd -p
f09f98870a

$ php -r 'echo $argv[1]."\n";' $'\360\237\230\207' 2>&1|xxd -p
f09f98870a
完全相同的字节,所以当我将它们打印到终端时,它们要么都成功,要么都失败

$echo$'\360\237\230\207'2>&1 | xxd-p | xxd-r-p

您刚刚用一些控制字符更改了终端的行为。我建议您将其写入一个文件,然后检查该文件。顺便说一下
2>&1
不好(您允许两个流并行写入,但这不是问题所在)。终端接收到一个不完整的字符,并在获取其余字符之前将其写入。尝试将其写入文件并检查文件,或者在
xxd
中使用一个大分组(这样终端将在终端决定写入控制台之前接收所有字节)@alecxs unicode字符U+1F607(@GiacomoCatenazzi在每个命令之后添加了
>testoutput-N.bin
(但就在
2>&1
之前,如果存在的话)然后在testoutput2020-07-06-*;do hextdump-C$i;done;
所有相同的字节中执行
操作,以确保我在testoutput-[2-4]中执行
操作时没有疏忽或阅读障碍.bin;do cmp testoutput-1.bin$i;done&&echo‘完全相同’
,它们都是一样的。@GiacomoCatenazzi认为
2>&1
不好……我这样做是为了证明php或echo没有将控制字符输出到
xxd
或终端,不管这种可能性有多大。你刚刚改变了te的行为带有一些控制字符的终端我建议您将其写入文件,并检查该文件。顺便说一句
2>&1
不正确(您允许两个流并行写入,但这不是问题)。终端接收到一个不完整的字符,并在获取其余字符之前将其写入。尝试将其写入文件并检查文件,或在
xxd
中使用一个大分组(以便终端在决定写入控制台之前接收所有字节)@alecxs unicode字符U+1F607(@GiacomoCatenazzi在每个命令之后添加了
>testoutput-N.bin
(但就在
2>&1
之前,如果存在),然后在testoutput2020-07-06-*;do hextdump-C$I;done;
所有相同的字节中添加了
,以确保我在testoutput-[2-4]中没有疏忽或阅读障碍.bin;do-cmp testoutput-1.bin$i;done&&echo“都一样”
,它们都一样。@GiacomoCatenazzi认为
2>&1
不好……我这样做是为了证明php或echo没有将控制字符输出到
xxd
或终端,不管可能性有多大。