4

一个站点被移动到另一台安装了 Solaris 和其他 iconv 设置的服务器。现在,当我使用 Zend Framework 中的“StringLength”函数验证任何内容时,我的脚本失败并出现以下错误:

Notice: iconv_strlen() [function.iconv-strlen]: Wrong charset, conversion from `UTF-8' to `UCS-4LE' is not allowed in /usr_files/phplibs/library/Zend/Validate/StringLength.php on line 213

据我了解,服务器确实知道“UCS-4LE”,这是主要问题。

服务器管理员回答说他可以解决这个问题。您知道如何在此服务器上设置 ZF 吗?

4

2 回答 2

1

iconv 库期待一个以“UCS-4LE”编码的字符串,但收到了一个它检测为“UTF-8”的字符串。您可能在新服务器上有不同的默认编码。尝试将第三个参数传递给构造函数(as 'utf-8')。

于 2009-10-21T17:42:32.820 回答
0

虽然这是一个老话题,但今天我在迁移到运行 xampp 的新服务器(Linux Suse、PHP 5.3.5、Zend Framework 1.11.10)时想到了这个话题。我使用以下测试脚本重现了上述错误:

<?php
echo iconv_strlen("hello");
?>

在命令行和浏览器中。经过一些故障排除后,我发现以下两种方法之一“解决”了眼前的问题:

<?php
echo iconv_strlen("hello", 'utf-8');
?>

或者

<?php
iconv_set_encoding("internal_encoding", "UTF-8");
echo iconv_strlen("hello");
?>

但是在 ZF 中添加 iconv_set_encoding 不起作用。

更改 php.ini 以使更改永久化对 ZF 确实有效

[iconv]
iconv.input_encoding = ISO-8859-1
iconv.internal_encoding = UTF-8
iconv.output_encoding = ISO-8859-1

但是,iconv 在新服务器上起作用的最初原因超出了我的范围。

于 2011-09-19T13:55:36.090 回答