fgets (STDIN) 无法获得终端输入的中文内容(包括标点符号)

我目前尝试着使用php做一个终端交互工具,但是使用fgets(STDIN)来获取终端输入内容时,输入的中文在终端只能打印出空字符串,请大家帮忙看看。(PHP7.2.11, windows10)
代码如下

    namespace Client;

class Client
{
    public function __construct()
    {
        $msg = $this->getMsg();
        var_dump($msg);
    }

    public function getMsg(){
        fwrite(STDOUT, "请输入消息:");

        return fgets(STDIN);
    }
}

new Client();

输出的效果如下:
E:\www\Client>php Client.php
请输入消息:你好;
string(5) "
"

讨论数量: 4

同问题,老哥解决了没有?

4年前 评论

我也是遇到了,windows10系统会出现这种情况,linux下 fgets(STDIN) 获取参数没问题,最后用的是 getopt() 函数解决这个问题。

我的方案是,判断系统,windows用 getopt,linux用 fgets(STDIN) ,给用户不同的终端示例,提示。

3年前 评论

readline()可以获取到,但是readine 显示键盘入的字会变形,但是不影响获取

3年前 评论
pandelix 1年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!