私はあなたとほぼ同じ状態を持っています、
開発マシンはwindows+php5.3
開発マシンは Linux + php 5.2.14
ZF のバージョンは 1.10 です
私が持っていた唯一の違いは次のとおりです。以前はmb_internal_encoding("UTF-8");
ブートストラップクラスに追加していました
参考までに、データベースからテキスト (アラビア語) をキャッシュしていましたが、ファイルを開くと、アラビア語のテキストが期待どおりに表示されます。
更新 : 1-明確にするために、ここに私の完全な initCache 関数があります
public function _initCache() {
mb_internal_encoding("UTF-8");
$frontendOptions = array(
'automatic_serialization' => TRUE,
'lifetime' => 86400
);
$backendOptions = array(
'cache_dir' => APPLICATION_PATH . "/configs/cache/",
///'cache_dir' => sys_get_temp_dir(),
);
$cache = Zend_Cache::factory('Core', 'File', $frontendOptions, $backendOptions);
Zend_Db_Table_Abstract::setDefaultMetadataCache($cache);
Zend_Registry::set("cache", $cache);
}
説明:
1-PHP 6 より前の PHP バージョンには、UTF-8 のネイティブ サポートがありません
。 https://stackoverflow.com/questions/716703/what-is-coming-in-php-6
2- ICONVまたはMB_STRINGを使用して、PHP 5.3または5.2をUTF8で処理する
使うだけで var_dump(mb_internal_encoding());
ISO-8859-1を内部的に使用していることがわかります。
あなたはそれをオーバーライドすることができますvar_dump(mb_internal_encoding("UTF-8"));
それはtrueを出力します(内部エンコーディングのオーバーライドに成功します)
正直に言うと、より良い解決策があるのか 、それがどれほど悪いのかわかりません?? 、
もっと良いものがあれば、喜んで採用します:)
その機能を使用したくない場合はUPDATE 2"Zend/Cache/Backend/File.php"
、このファイルを開き、行976に移動してこれを変更します:
protected function _filePutContents($file, $string)
{
$result = false;
$f = @fopen($file, 'ab+');
if ($f) {
if ($this->_options['file_locking']) @flock($f, LOCK_EX);
fseek($f, 0);
ftruncate($f, 0);
$tmp = @fwrite($f, $string);
if (!($tmp === FALSE)) {
$result = true;
}
@fclose($f);
}
@chmod($file, $this->_options['cache_file_umask']);
return $result;
}
これになる:
protected function _filePutContents($file, $string)
{
$string = mb_convert_encoding($string , "UTF-8" , "ISO-8859-1"); // i didn't test it , use it at your own risk and i'd rather stick with the first solution
$result = false;
$f = @fopen($file, 'ab+');
if ($f) {
if ($this->_options['file_locking']) @flock($f, LOCK_EX);
fseek($f, 0);
ftruncate($f, 0);
$tmp = @fwrite($f, $string);
if (!($tmp === FALSE)) {
$result = true;
}
@fclose($f);
}
@chmod($file, $this->_options['cache_file_umask']);
return $result;
}
私は手動でテストしませんでしたが、期待どおりに動作するはずです
役に立ってよかった!