Подтвердить что ты не робот

Как вводить китайские символы в php cli?

Китайские символы могут отображаться и вводиться на моем LXTerminal.

[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.
введите описание изображения здесь Теперь позвольте войти в php cli (или сказать php shell)

введите описание изображения здесь

введите описание изображения здесь Китайские символы исчезли, когда нажмите кнопку ввода.
это означает, что китайские символы могут отображаться, но не могут быть введены в режиме php cli.
Как заставить китайские символы вводить в режиме php cli?
И это подтвержденный факт, что китайские символы не могут быть вставлены в php cli тоже. Может быть, некоторые атрибуты mbstring будут отредактированы в /etc/php 5/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]:/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.

Появилось новое открытие!
Это библиотека readline на php7.

php7 -i |grep Readline
Readline Support => enabled
Readline library => 6.3

Это оболочка EditLine на php5.

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/x 86_64-linux-gnu/libreadline.so.6.3, как заставить его работать для моего php5?

4b9b3361

Ответ 1

php -a использует libreadline или libedit в качестве базовых библиотек.

Внутри функции readline_shell_run() в ext/readline/readline.c PHP вызывает библиотечную функцию readline(). Таким образом, проблема заключается не в самом PHP, а в используемой библиотеке.

В моем терминале OS X [libedit 3.0.0] он отлично работает, вставляет и переходит в CLI.

Итак, чтобы выяснить проблему, что вы используете libreadline? или libedit? (проверить версию и библиотеку, используемую с ldd "$(which php)"). Изучите, использует ли версия libedit или libreadline ваша установка PHP, с ошибками с кодировкой используемого терминала.

Если есть более новые версии библиотек, возможно, вам захочется попробовать их установить и проверить, не пропала ли проблема.