在 PHP 的 popen 中格式化输出 bash 脚本

在我的 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

⠋ 是一个正在移动的装载机。这可能是问题吗?或者这些字符是线条的颜色代码?


缥缈止盈
浏览 154回答 1
1回答

猛跑小猪

那些是ANSI Escape Sequences,它们不是 bash 命令,而是用于在一行上着色输出或替换/更新输出的控制台命令。命令通常会提供一个—no-color标志。此外,还存在用于常见命令的环境变量:NO_COLOR. 这是禁用彩色输出的常用标志/变量列表 => https://no-color.org/否则,您始终可以使用正则表达式过滤输出: /(\x9B|\x1B\[)[0-?]*[ -\/]*[@-~]/
打开App,查看更多内容
随时随地看视频慕课网APP