Проблема с Zend_Cache и UTF-8 - PullRequest
       12

Проблема с Zend_Cache и UTF-8

0 голосов
/ 10 февраля 2010

Я пытаюсь сохранить символы UTF-8 с Zend_Cache (например, Ť, š и т. Д.), Но Zend_Cache портит их и сохраняет как Å, ¾ и другие странные символы.

Вот фрагмент моего кода, который сохраняет данные в кеш (символы UTF-8 перепутаны только онлайн, когда я пробую его на моем ПК на localhost, он работает нормально):

// cache the external data
$data = array('nextRound' => $nextRound,
              'nextMatches' => $nextMatches,
              'leagueTable' => $leagueTable);
$cache = Zend_Registry::get('cache');
$cache->save($data, 'externalData');

Прежде чем сохранить кэшированные данные, я очищаю их с помощью HTMLPurifier и выполняю некоторый анализ с помощью DOM, что-то вроде этого:

    // fetch the HTML from external server
    $html = file_get_contents('http://www.example.com/test.html');

    // purify the HTML so we can load it with DOM
    include BASE_PATH . '/library/My/htmlpurifier-4.0.0-standalone/HTMLPurifier.standalone.php';
    $config = HTMLPurifier_Config::createDefault();
    $config->set('HTML.Doctype', 'XHTML 1.0 Strict');
    $purifier = new HTMLPurifier($config);
    $html = $purifier->purify($html);

    $dom = new DOMDocument();
    // hack to preserver UTF-8 characters
    $dom->loadHTML('<?xml encoding="UTF-8">' . $html);
    $dom->preserveWhiteSpace = false;

    // some parsing here

Вот как я инициализирую Zend_Cache в файле начальной загрузки:

protected function _initCache()
{
    $frontend= array('lifetime' => 7200,
                     'automatic_serialization' => true);
    $backend= array('cache_dir' => 'cache');
    $this->cache = Zend_Cache::factory('core',
                                       'File',
                                       $frontend,
                                       $backend);
}

Есть идеи? Он работает на локальном хосте (где у меня есть поддержка иностранного языка, используемого в HTML), но не на сервере.

1 Ответ

0 голосов
/ 05 ноября 2013

У меня была похожая проблема с развертыванием FPDF. Здесь символ html пробел был преобразован в тот же символ Å, который вы получаете здесь. Это было нормально на моих локальных окнах, но не работало в моей среде сервера Linux.

Попробуйте это:

$str = iconv('UTF-8', 'windows-1252', html_entity_decode($str));

...