如何在 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。

错误报告如下:

  1. https://mail-index.netbsd.org/tech-userlevel/2011/01/26/msg004486.html
  2. https://bugs.launchpad.net/ubuntu/+source/libedit/+bug/816758

解决方案:

我创建了一个具有更正版本的 Debian 软件包。它在 Ubuntu 14.04 上成功运行并解决了重音字母的问题。

  1. cd /tmp
  2. git 克隆 https://github.com/mitghi/php5
  3. 光盘./php5
  4. dpkg -i -B --force-depends --force-overwrite php5_5.5.9+dfsg-1ubuntu4.17_all.deb
  5. php5enmod 读取行
  6. dpkg -i php5-readline_5.5.9+dfsg-1ubuntu4.17_amd64.deb

注:

如果出现依赖错误,运行 : sudo apt-get -f install