Введение в Zend Framework

 Learning Zend Framework

appendix

 Zend Framework Reference


  • Zend_Gdata
  • Zend_Http
  • Zend_InfoCard
  • Zend_Json
  • Zend_Layout
  • Zend_Ldap
  • Zend_Loader
  • Zend_Locale
  • Zend_Log
  • Zend_Mail
  • Zend_Markup
  • Zend_Measure
  • Zend_Memory
  • Zend_Mime
  • Zend_Navigation
  • Zend_Oauth
  • Zend_OpenId
  • Zend_Paginator
  • Zend_Pdf
  • Zend_ProgressBar
  • Zend_Queue
  • Zend_Reflection
  • Zend_Registry
  • Zend_Rest

  • Zend_Search_Lucene
  • Zend_Serializer
  • Zend_Server
  • Zend_Service
  • Zend_Session
  • Zend_Soap
  • Zend_Tag
  • Zend_Test
  • Zend_Text
  • Zend_TimeSync
  • Zend_Tool
  • Zend_Tool_Framework
  • Zend_Tool_Project
  • Zend_Translate
  • Zend_Uri
  • Zend_Validate
  • Zend_Version
  • Zend_View
  • Zend_Wildfire
  • Zend_XmlRpc
  • ZendX_Console_Process_Unix
  • ZendX_JQuery
  • Ttranslation 27.4% Update 2010-11-28 - Revision 23238 - Version ZF 1.11.x

    60.6. Кодировки

    60.6.1. Поддержка UTF-8 и однобайтных наборов символов

    Zend_Search_Lucene в своей работе использует кодировку UTF-8. Файлы индекса хранят данные unicode в кодировке Modified UTF-8 от Java. Ядро Zend_Search_Lucene полностью поддерживает его за одним исключением. [16]

    Действующая кодировка для входных данных может быть указана через API Zend_Search_Lucene. Данные будут автоматически преобразованы в кодировку UTF-8.

    60.6.2. Используемый по умолчанию анализатор текста

    Несмотря на это, используемый по умолчанию анализатор текста (который также применяется в парсере запросов) использует ctype_alpha() для разбиения текста и поисковых запросов на лексемы.

    ctype_alpha() не является совместимым с UTF-8, поэтому анализатор конвертирует текст в кодировку 'ASCII//TRANSLIT' до индексации. То же самое выполняется при парсинге запросов. [17]

    60.6.3. Совместимый с UTF-8 анализатор текста

    Zend_Search_Lucene также содержит совместимый с UTF-8 анализатор текста с ограниченным функционалом.

    <?php <?php
    Zend_Search_Lucene_Analysis_Analyzer
    ::setDefault(
        new 
    Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8());

    Он разбивает на лексемы данные для индексации в режиме UTF-8, не испытывая проблем с любыми входящими в UTF-8 символами.

    Данный анализатор имеет два ограничения:

    • обрабатывает все не входящие в кодировку ASCII как буквы;

    • является чувствительным к регистру;

    Из-за этих ограничений он не используется по умолчанию, но может быть полезен некоторым.

    Нечувствительность к регистру может быть сэмулирована с помощью strtolower().

    <?php <?php
    setlocale
    (LC_CTYPE'de_DE.iso-8859-1');

    ...

    Zend_Search_Lucene_Analysis_Analyzer::setDefault(
        new 
    Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8());

    ...

    $doc = new Zend_Search_Lucene_Document();

    $doc->addField(Zend_Search_Lucene_Field::UnStored('contents'strtolower($contents)));

    // Поле заголовка для поиска
    // (индексируется, но не сохраняется в индексе)
    $doc->addField(Zend_Search_Lucene_Field::UnStored('title'strtolower($title)));

    // Поле заголовка для возвращения в результатах поиска
    // (не индексируется, но сохраняется)
    $doc->addField(Zend_Search_Lucene_Field::UnIndexed('_title'$title));

    То же самое преобразование должно выполняться и для запросов:

    <?php <?php
    setlocale
    (LC_CTYPE'de_DE.iso-8859-1');

    ...

    Zend_Search_Lucene_Analysis_Analyzer::setDefault(
        new 
    Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8());

    ...

    $hits $index->find(strtolower($query));



    [16] Zend_Search_Lucene поддерживает только символы Basic Multilingual Plane (от 0x0000 до 0xFFFF) и не поддерживает дополнительные символы (символы, чьи коды больше 0xFFFF).

    Java 2 представляет эти символыв виде пары значений символьного типа (16 бит), перое из диапазона 0xD800-0xDBFF, второе из диапазона 0xDC00-0xDFFF. Тогда они кодируются как обычные символы UTF-8 в шести байтах. Стандартное представление UTF-8 использует четыре байта для дополнительных символов.

    [17] Преобразование в 'ASCII//TRANSLIT' может зависеть от текущей локали и операционной системы.

    digg delicious meneame google twitter technorati facebook

    Comments

    Loading...