2009-10-21 32 views
4

將一個站點移動到另一臺安裝了Solaris和其他iconv設置的服務器上。現在,當我確認任何與Zend框架「StringLength」功能我的腳本失敗,此錯誤:使用iconv的Zend Framework和字符串轉換

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?

回答

1

iconv庫期待在'UCS-4LE'中編碼的字符串,但收到一個它檢測爲'UTF-8'的字符串。您可能在新服務器上使用了不同的默認編碼。嘗試將第三個參數傳遞給constructor(如'utf-8')。

+0

我試過了: mb_internal_encoding(「UTF-8」); 同樣, iconv_set_encoding(「internal_encoding」,「UTF-8」); iconv_set_encoding(「output_encoding」,「UTF-8」); 它不工作 – kubum 2009-10-21 17:45:50

+0

對不起,我的錯。更新的答案。 – soulmerge 2009-10-21 17:48:40

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在新服務器上起到了原有的原因是超越我。