如何在php cli中输入中文字符?

it_*_*ure 10 php

中文字符可以在我的LXTerminal上显示和输入.

root@hwy:/home/debian8# ??    \\now to input chinese characters on my LXTerminal,it means  chinese characters can be inputted.
bash: ??: command not found   \\ bash react the  chinese characters on my LXTerminal,it means  chinese characters can be displayed.    
Run Code Online (Sandbox Code Playgroud)

中文字符可以输入并显示在我的python shell上.
在此输入图像描述 现在让我们进入php cli(或说php shell)

在此输入图像描述

在此输入图像描述 点击回车键时汉字消失了.
这意味着可以显示中文字符但不能在php cli模式下输入.
如何在php cli模式下输入汉字?
事实证明,中文字符也不能粘贴到php cli中.
也许某些mbstring属性将在/etc/php5/cli/php.ini中编辑?

感谢bwoebi.继续我研究的三个事实.
1. libreadline和libedit的版本.

root@hwy:/home/debian8# find /  -name   'libreadline*'
/lib/x86_64-linux-gnu/libreadline.so.6.3
/lib/x86_64-linux-gnu/libreadline.so.6


root@hwy:/home/debian8# find /  -name   'libedit*'
/usr/lib/x86_64-linux-gnu/libedit.so.2
/usr/lib/x86_64-linux-gnu/libedit.so.2.0.51
/usr/share/lintian/overrides/libedit2
Run Code Online (Sandbox Code Playgroud)

2.root@hwy:/ home/debian8 #ldd"$(哪个php)"

linux-vdso.so.1 (0x00007ffd35e5c000)
libcrypt.so.1 => /lib/x86_64-linux-gnu/libcrypt.so.1 (0x00007ff98ac68000)
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007ff98aa4d000)
libresolv.so.2 => /lib/x86_64-linux-gnu/libresolv.so.2 (0x00007ff98a836000)
libonig.so.2 => /usr/lib/x86_64-linux-gnu/libonig.so.2 (0x00007ff98a5cc000)
libcrypto.so.1.0.0 => /usr/lib/x86_64-linux-gnu/libcrypto.so.1.0.0 (0x00007ff98a1d0000)
libssl.so.1.0.0 => /usr/lib/x86_64-linux-gnu/libssl.so.1.0.0 (0x00007ff989f6f000)
libdb-5.3.so => /usr/lib/x86_64-linux-gnu/libdb-5.3.so (0x00007ff989bae000)
libqdbm.so.14 => /usr/lib/libqdbm.so.14 (0x00007ff989961000)
libbz2.so.1.0 => /lib/x86_64-linux-gnu/libbz2.so.1.0 (0x00007ff989751000)
libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007ff9894e3000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007ff9892db000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007ff988fda000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007ff988dd6000)
libnsl.so.1 => /lib/x86_64-linux-gnu/libnsl.so.1 (0x00007ff988bbe000)
libxml2.so.2 => /usr/lib/x86_64-linux-gnu/libxml2.so.2 (0x00007ff988857000)
libgssapi_krb5.so.2 => /usr/lib/x86_64-linux-gnu/libgssapi_krb5.so.2 (0x00007ff98860c000)
libkrb5.so.3 => /usr/lib/x86_64-linux-gnu/libkrb5.so.3 (0x00007ff988338000)
libk5crypto.so.3 => /usr/lib/x86_64-linux-gnu/libk5crypto.so.3 (0x00007ff988107000)
libcom_err.so.2 => /lib/x86_64-linux-gnu/libcom_err.so.2 (0x00007ff987f03000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007ff987b58000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007ff98793b000)
/lib64/ld-linux-x86-64.so.2 (0x00007ff98ae9f000)
liblzma.so.5 => /lib/x86_64-linux-gnu/liblzma.so.5 (0x00007ff987718000)
libkrb5support.so.0 => /usr/lib/x86_64-linux-gnu/libkrb5support.so.0 (0x00007ff98750c000)
libkeyutils.so.1 => /lib/x86_64-linux-gnu/libkeyutils.so.1 (0x00007ff987308000)
Run Code Online (Sandbox Code Playgroud)

3. php7 -a
php7上的 中文字符安装为
http://www.tecmint.com/install-and-compile-php-7-on-centos-7-and-debian-8/
可以显示中文字符和投入php7 -a.

有一个新的发现!
它是php7上的readline库.

php7 -i |grep Readline
Readline Support => enabled
Readline library => 6.3
Run Code Online (Sandbox Code Playgroud)

它是php5上的EditLine包装器.

php -i |grep Readline
Readline Support => enabled
Readline library => EditLine wrapper
Run Code Online (Sandbox Code Playgroud)

问题在于半解决状态.
如何让我的php5使用Readline库6.3作为php7呢?
我不想再次编译我的php5,只是为了更改库?
今天我使用命令在我的virtualbox中编译php5:

./configure \
--prefix=/usr/local/php5.6 \
--with-config-file-path=/usr/local/php5.6/etc \
--with-readline
Run Code Online (Sandbox Code Playgroud)

可以在php -a交互模式下输入和显示汉字.
删除当前的php5并从头开始编译所有内容是不明智的.

find / -name 'readline.so*'
/usr/lib/php5/20131226/readline.so
/usr/lib/x86_64-linux-gnu/libreadline.so
/usr/lib/x86_64-linux-gnu/ruby/2.1.0/readline.so
/usr/lib/x86_64-linux-gnu/libguilereadline-v-18.so.18
/usr/lib/x86_64-linux-gnu/libguilereadline-v-18.so
/usr/lib/x86_64-linux-gnu/libguilereadline-v-18.so.18.0.0
/usr/lib/python2.7/lib-dynload/readline.x86_64-linux-gnu.so
/lib/x86_64-linux-gnu/libreadline.so.6.3
/lib/x86_64-linux-gnu/libreadline.so.6
Run Code Online (Sandbox Code Playgroud)

也许启用/lib/x86_64-linux-gnu/libreadline.so.6.3,如何使它适用于我的php5?

bwo*_*ebi 1

php -a使用 libreadline 或 libedit 作为底层库。

在 ext/readline/readline.c 的函数内部readline_shell_run(),PHP 调用readline()库函数。所以问题不在于PHP本身,而在于使用的库。

在我的 OS X 终端 [libedit 3.0.0] 上,它工作正常,粘贴并传递到 CLI。

那么,要弄清楚这个问题,你在使用 libreadline 做什么?或者libedit?(检查使用的版本和库ldd "$(which php)")研究您的 PHP 安装使用的 libedit 或 libreadline 版本是否存在与您正在使用的终端编码有关的已知错误。

如果有更新版本的库,您可能需要尝试安装这些库并检查问题是否消失。