我继承了一个运行 php 5.1.6 的旧 Ubuntu 6.10 服务器,它使用 sybase 连接到 MSSQL。一位用户提交了一些包含短破折号的文本,导致我的一个脚本崩溃。事实证明 sybase 不喜欢 UTF-8 字符,例如破折号或 é。未来在数据库中的搜索也不会喜欢这些字符。为了解决这个问题,我想将破折号等字符转换为连字符,é 转换为 e 等......我对音译做了一些研究。
我想出的解决方案是使用 PHP 的 iconv 函数从 UTF-8 音译为 ASCII。它在我的开发机器(Ubuntu 12.04)上运行良好,但在我的旧生产服务器(Ubuntu 6.10)上运行不佳。经过一些调试,我想我已经将问题追溯到 iconv 的版本。
echo café > test.txt
iconv --from-code=UTF8 --to-code=ASCII//TRANSLIT test.txt
result on 6.10: caf?
result on 12.04: cafe
iconv --version
result on 6.10: iconv (GNU libc) 2.4
result on 12.04: iconv (Ubuntu EGLIBC 2.15-0ubuntu10) 2.15
locale
在两个系统上都返回“en_US.UTF-8”
我想我需要升级生产机器的 iconv 库,但我不太确定如何去做。