автозаполнение полей

Тема в разделе "Другие языки", создана пользователем Juri, 26 апр 2010.

Статус темы:
Закрыта.
Модераторы: Цукер
  1. Juri

    Juri

    Заблокирован
    Регистр.:
    5 окт 2007
    Сообщения:
    1.068
    Симпатии:
    197
    Собственно сабж, основное требование что б нормально работал с русским. В приложении есть то что нашел, но с русским он не дружит. Помогите сдружить или предложите альтернативу, заранее спасибо
     

    Вложения:

  2. polyetilen

    polyetilen Заблокирован

    Регистр.:
    10 авг 2006
    Сообщения:
    814
    Симпатии:
    474
    тут для utf-8 файл ajax-list-countries.php, добавлена кодировка и исправлена регулярка

    PHP:
    header('Content-Type: text/plain; charset=utf-8');
    $conn mysql_connect("localhost","root","");
    mysql_select_db("test",$conn);
    mysql_query("SET NAMES 'utf8'");

    if(isset(
    $_GET['getCountriesByLetters']) && isset($_GET['letters'])){
        
    $letters $_GET['letters'];
        
    $letters preg_replace("/[^a-zа-яё0-9 ]/si","",$letters);
        
    $res mysql_query("select ID,countryName from ajax_countries where countryName like '".mysql_real_escape_string($letters)."%'") or die(mysql_error());
        
    //echo "1###select ID,countryName from ajax_countries where countryName like '".$letters."%'|";
        
    while($inf mysql_fetch_array($res)){
            echo 
    $inf["ID"]."###".$inf["countryName"]."|";
        }    
    }
    а альтернативы например дополнения для jquery

    http://plugins.jquery.com/taxonomy/term/109

    или без jquery

    http://www.brandspankingnew.net/archive/2007/02/ajax_auto_suggest_v2.html
     
    Conwell нравится это.
  3. Juri

    Juri

    Заблокирован
    Регистр.:
    5 окт 2007
    Сообщения:
    1.068
    Симпатии:
    197
    Спасибо конечно, но в том то и проблема что весь сайт в cp1251 и база тоже, ставил вместо utf cp1251 на денвере едет, на сервере ни в какую, сервер под freeBSD ничего не посоветуете?


    если тут указывать utf8 лезит такая ошибка
    Illegal mix of collations (cp1251_general_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation 'like'

    если cp1251 то просто не кушает русский
     
  4. polyetilen

    polyetilen Заблокирован

    Регистр.:
    10 авг 2006
    Сообщения:
    814
    Симпатии:
    474
    проблема в том, что яваскрипт передаёт данные get запросом ajax-list-countries.php?getCountriesByLetters=1&letters=текс, но текст тут не кодированный и не ясно что станет с текстом на сервере когда его получит php, поэтому текст надо кодировать в php это функция urlencode, в яваскрипте encodeURIComponent но в яваскрипте эта функция кодированный текст всегда отдаёт в кодировке utf8, и когда известно какая кодировка запроса можно делать точный ответ.

    Надо добавить кодирование запроса для яваскрипта в файле js/ajax-dynamic-list.js строка 242 была:
    HTML:
    
    var url = ajax_list_externalFile + '?' + paramToExternalFile + '=1&letters=' + inputObj.value.replace(" ","+");
    
    надо поменять на
    HTML:
    
    var url = ajax_list_externalFile + '?' + paramToExternalFile + '=1&letters=' + encodeURIComponent(inputObj.value);
    
    и новый ajax-list-countries.php для кодировки windows 1251

    PHP:
    header('Content-Type: text/plain; charset=windows-1251');
    $conn mysql_connect("localhost","root","");
    mysql_select_db("test",$conn);
    mysql_query("SET NAMES 'cp1251'");

    if(isset(
    $_GET['getCountriesByLetters']) && isset($_GET['letters'])){
        
    $letters iconv('UTF-8''Windows-1251'$_GET['letters']);
        
    $letters preg_replace("/[^a-zа-яё0-9 ]/si","",$letters);
        
    $res mysql_query("select ID,countryName from ajax_countries2 where countryName like '".mysql_real_escape_string($letters)."%'") or die(mysql_error());
        
    //echo "1###select ID,countryName from ajax_countries where countryName like '".$letters."%'|";
        
    while($inf mysql_fetch_array($res)){
            echo 
    $inf["ID"]."###".$inf["countryName"]."|";
        }    
    }
    тут кодировка в хедере, кодировка для базы

    а ошибка Illegal mix of collations... это правельно не всё можно перекодировать из utf-8 в windows-1251, а только те символы что есть в windows-1251, так что mysql такое конвертирование не поддерживает
     
    Juri нравится это.
  5. Juri

    Juri

    Заблокирован
    Регистр.:
    5 окт 2007
    Сообщения:
    1.068
    Симпатии:
    197
    Спасибо большое, заработало, но вот с буквами Й Ё не дружит :) но это видимо из-за перекодирования

    П.С. Что бы вы посоветовали почитать по js?
     
  6. polyetilen

    polyetilen Заблокирован

    Регистр.:
    10 авг 2006
    Сообщения:
    814
    Симпатии:
    474
    может preg_replace фильтрует Й Ё, надо откоментировать строку
    PHP:
    //echo "1###select ID,countryName from ajax_countries where countryName like '".$letters."%'|";
    и посмотреть что за запросы в базу идут есть ли Й Ё, а вообще строку
    PHP:
    $letters preg_replace("/[^a-zа-яё0-9 ]/si","",$letters);
    можно закоментировать хватает mysql_real_escape_string

    по яваскриптам особо ничего не читал только начальные шаги

    http://firststeps.ru/html/js/js1.html

    а потом сразу перекинулся на библиотеку яваскриптов jquery

    http://ru.wikipedia.org/wiki/JQuery
     
Статус темы:
Закрыта.