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

时间:2016-08-11 08:45:29

标签: 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.    

汉字可以输入并显示在我的python shell上 enter image description here 现在让我们进入php cli(或说php shell)

enter image description here

enter image description here 点击回车键时汉字消失。
这意味着可以显示中文字符但不能在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

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)

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

它是php5上的EditLine包装器。

php -i |grep Readline
Readline Support => enabled
Readline library => EditLine wrapper

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

./configure \
--prefix=/usr/local/php5.6 \
--with-config-file-path=/usr/local/php5.6/etc \
--with-readline

可以在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

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

1 个答案:

答案 0 :(得分: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的版本是否已知使用您正在使用的终端的编码的错误。

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