如何在 PHP 脚本交互中输入重音词?
How can I input accent words in a PHP script interaction?
我正在编写一个 PHP 脚本,旨在 运行 在 Linux 终端中,以便将变量结果放入文本文件中。
一切似乎都工作正常,但是当我 运行 脚本并且它在终端中显示输入行时,我无法写重音词,包括单个重音波浪号 (´
) 和重音字母,如 á é í ó ú
.
这是我用来接受用户输入的代码部分:
<?php
$cuantos = readline("Cuantas veces? ");
$cadena = readline("Escriba el Texto: ");
$separar = readline("Incluir separadores? ");
$separar = strtoupper($separar);
$archivar = "";
for ($x = 1; $x <= $cuantos; $x++) {
if ($separar=="S") { $archivar = $archivar . "Texto ".$x."\n";}
if ($separar=="S") { $archivar = $archivar . "----------------------------------\n";}
echo $archivar = $archivar . $cadena\n;
if ($separar=="S") { $archivar = $archivar . "==================================\n";}
}
file_put_contents('textos.txt', $archivar);
?>
此处显示了终端中 运行ning 脚本的屏幕截图:
请注意,文本应显示为 Este texto debería tener acentos pero en la terminal no está aceptando ningún caracter con tilde.
,但在文本中没有显示任何重音。
我已经尝试使用 <?php header("Content-Type: text/html; charset=utf-8"); ?>
和其他一些字符集技巧来使 readline
接受重音,但没有成功。我也尝试过更改 php.ini
默认字符集,但到目前为止没有成功。
我可以毫无问题地在终端中输入重音字母,如以下屏幕截图所示:
按照建议插入 mb_internal_encoding("UTF-8");
后,还没有成功。
也许我的终端出了点问题,但这让我觉得这应该可以在 tty 终端上运行,还是不行?所以我试了一下,结果是一样的。
感谢任何帮助。
已编辑
问题是 Ubuntu 14.04 上的默认 php 软件包使用最初为 BSD 编写的 libedit。它有一个错误,解决方法需要用 readline 替换 libedit。
错误报告如下:
- https://mail-index.netbsd.org/tech-userlevel/2011/01/26/msg004486.html
- https://bugs.launchpad.net/ubuntu/+source/libedit/+bug/816758
解决方案:
我创建了一个具有更正版本的 Debian 软件包。它在 Ubuntu 14.04 上成功运行并解决了重音字母的问题。
- cd /tmp
- git 克隆 https://github.com/mitghi/php5
- 光盘./php5
- dpkg -i -B --force-depends --force-overwrite php5_5.5.9+dfsg-1ubuntu4.17_all.deb
- php5enmod 读取行
- dpkg -i php5-readline_5.5.9+dfsg-1ubuntu4.17_amd64.deb
注:
如果出现依赖错误,运行 : sudo apt-get -f install
我正在编写一个 PHP 脚本,旨在 运行 在 Linux 终端中,以便将变量结果放入文本文件中。
一切似乎都工作正常,但是当我 运行 脚本并且它在终端中显示输入行时,我无法写重音词,包括单个重音波浪号 (´
) 和重音字母,如 á é í ó ú
.
这是我用来接受用户输入的代码部分:
<?php
$cuantos = readline("Cuantas veces? ");
$cadena = readline("Escriba el Texto: ");
$separar = readline("Incluir separadores? ");
$separar = strtoupper($separar);
$archivar = "";
for ($x = 1; $x <= $cuantos; $x++) {
if ($separar=="S") { $archivar = $archivar . "Texto ".$x."\n";}
if ($separar=="S") { $archivar = $archivar . "----------------------------------\n";}
echo $archivar = $archivar . $cadena\n;
if ($separar=="S") { $archivar = $archivar . "==================================\n";}
}
file_put_contents('textos.txt', $archivar);
?>
此处显示了终端中 运行ning 脚本的屏幕截图:
请注意,文本应显示为 Este texto debería tener acentos pero en la terminal no está aceptando ningún caracter con tilde.
,但在文本中没有显示任何重音。
我已经尝试使用 <?php header("Content-Type: text/html; charset=utf-8"); ?>
和其他一些字符集技巧来使 readline
接受重音,但没有成功。我也尝试过更改 php.ini
默认字符集,但到目前为止没有成功。
我可以毫无问题地在终端中输入重音字母,如以下屏幕截图所示:
按照建议插入 mb_internal_encoding("UTF-8");
后,还没有成功。
也许我的终端出了点问题,但这让我觉得这应该可以在 tty 终端上运行,还是不行?所以我试了一下,结果是一样的。
感谢任何帮助。
已编辑
问题是 Ubuntu 14.04 上的默认 php 软件包使用最初为 BSD 编写的 libedit。它有一个错误,解决方法需要用 readline 替换 libedit。
错误报告如下:
- https://mail-index.netbsd.org/tech-userlevel/2011/01/26/msg004486.html
- https://bugs.launchpad.net/ubuntu/+source/libedit/+bug/816758
解决方案:
我创建了一个具有更正版本的 Debian 软件包。它在 Ubuntu 14.04 上成功运行并解决了重音字母的问题。
- cd /tmp
- git 克隆 https://github.com/mitghi/php5
- 光盘./php5
- dpkg -i -B --force-depends --force-overwrite php5_5.5.9+dfsg-1ubuntu4.17_all.deb
- php5enmod 读取行
- dpkg -i php5-readline_5.5.9+dfsg-1ubuntu4.17_amd64.deb
注:
如果出现依赖错误,运行 : sudo apt-get -f install