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

Статус
В этой теме нельзя размещать новые ответы.

Juri

Мой дом здесь!
Заблокирован
Регистрация
5 Окт 2007
Сообщения
1.064
Реакции
200
  • Автор темы
  • Заблокирован
  • #1
Собственно сабж, основное требование что б нормально работал с русским. В приложении есть то что нашел, но с русским он не дружит. Помогите сдружить или предложите альтернативу, заранее спасибо
 

Вложения

  • ajax-dynamic-list.zip
    17,5 KB · Просмотры: 6
тут для 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

или без jquery
 
  • Автор темы
  • Заблокирован
  • #3
тут для 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
*** скрытое содержание ***
или без jquery
*** скрытое содержание ***

Спасибо конечно, но в том то и проблема что весь сайт в cp1251 и база тоже, ставил вместо utf cp1251 на денвере едет, на сервере ни в какую, сервер под freeBSD ничего не посоветуете?


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

если cp1251 то просто не кушает русский
 
проблема в том, что яваскрипт передаёт данные 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
Спасибо большое, заработало, но вот с буквами Й Ё не дружит :) но это видимо из-за перекодирования

П.С. Что бы вы посоветовали почитать по js?
 
может 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

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

а потом сразу перекинулся на библиотеку яваскриптов jquery
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху