2016-08-11 30 views
10

中文字符可以在我的LXTerminal上顯示和輸入。如何在php cli中輸入漢字?

[email protected]:/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殼)

enter image description here

enter image description here 中國文字消失時,按一下回車鍵。
這意味着中文字符可以顯示,但不能在php cli模式下輸入。
如何讓中文字符可以在php cli模式下輸入?
而中文字符也不能粘貼到php cli中是一個確實的事實。
也許一些mbstring屬性會在/etc/php5/cli/php.ini中編輯?

感謝bwoebi。我的研究中增加了三個事實。
1. libreadline和libedit的版本。

[email protected]:/home/debian8# find/-name 'libreadline*' 
/lib/x86_64-linux-gnu/libreadline.so.6.3 
/lib/x86_64-linux-gnu/libreadline.so.6 


[email protected]:/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 

[email protected]:/家庭/ debian8#LDD 「$(其中PHP)」 上PHP7 -a
PHP7

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.Chinese字符被安裝爲
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在我的VirtualBox的使用命令:

./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的工作?

+0

爲什麼你的命令是用中文命名的? – Justinas

+0

我想驗證中文字符是否可以輸入並顯示在我的LXTerminal上。 –

+2

我不明白你的shell或終端正在改變你的漢字輸入與PHP有什麼關係? PHP不處理終端上的輸入,你的shell是。 – AntoineB

回答

1

php -a使用libreadline或libedit作爲基礎庫。

在ext/readline/readline中的readline_shell_run()函數內。c,PHP調用readline()庫函數。所以這個問題不在於PHP本身,而在於使用的庫。

在我的OS X終端[libedit 3.0.0]上,它可以正常工作,粘貼並傳遞給CLI。

所以,要找出問題,你在使用libreadline?或libedit? (檢查與ldd "$(which php)"一起使用的版本和庫)研究您的PHP安裝使用的libedit或libreadline的版本是否包含您正在使用的終端編碼的已知錯誤。

如果有更新版本的庫,您可能想嘗試安裝這些庫,並檢查問題是否消失。