在我的PHP脚本中,我正在使用popen()执行bash脚本,然后输出响应。但是响应具有不同的编码,我不知道如何转换。
我试图将其转换为utf8,但没有结果。还尝试将语言环境设置为nl_NL.utf8。
PHP函数:
while (@ ob_end_flush()); // end all output buffers if any
$proc = popen("$cmd 2>&1 ; echo Exit status : $?", 'r');
$live_output = "";
$complete_output = "";
while (!feof($proc))
{
$live_output = fread($proc, 4096);
$complete_output = $complete_output . $live_output;
echo "$live_output";
@ flush();
}
pclose($proc);
示例响应:
[2K[1A[2K[G
[2K[1A[2K[G⠋ load plugins
[2K[1A[2K[Gsuccess load plugins - 0.975 s
⠋ load plugins
这应该是:
success load plugins - 0.975 s
⠋是正在移动的装载机。这可能是问题吗?还是这些字符是该行的颜色代码?
答案 0 :(得分:0)
这些是ANSI Escape Sequences
,它们不是bash命令,而是用于在一行上为输出着色或替换/更新输出的控制台命令。
通常命令会提供一个—no-color
标志。
此外,还存在用于常见命令NO_COLOR
的环境变量。
这是禁用彩色输出的常见标志/变量的列表=> https://no-color.org/
否则,您始终可以使用正则表达式过滤输出:/(\x9B|\x1B\[)[0-?]*[ -\/]*[@-~]/