Помогите, проблема с измением кодировки текста в utf-8

msyuha

Новичок
Помогите, проблема с измением кодировки текста в utf-8

Я часто пишу сайты для wap. Многие наверное знают, что там используется кадировка utf-8, все бы хорошо, если не одна проблема.

проблема в следующем.
Мне нужно найти запись из базы данных соответствующих определенному запросу.
(в скрипте задается кодировка utf-8, т.е отображение текста на страницах скрипта нормальное)
Но при поиске слова (заведомо существующего в базе), выдается пустое значение.

Пример :


PHP:
                       $res = mysql_query("Select * from kat_sayts where  `name` LIKE '%$search%' or `about` LIKE '%$search%'");
                       $num = mysql_num_rows($res);
    if($num == 0)
          echo'По вашему запросу ничего не найдено<br/><a href="search.php">Назад</a><br/>';
    else
          echo'Ура вы что-то нашли';
То есть при любом запросе мы ничего не находим.
Как решить эту проблему, незнаю.
Пытался использовать функции

utf8_encode();
utf8_decode();

Не помогло.

И еще все в базе хранится в странных символах. (может это так utf-8 выглядит:))

Вот в таком стиле "РџРѕ РІР°С?ему запросу ничего РЅРµ найдено"
 

msyuha

Новичок
Читал, ничего не помогло. Пробовал все запросы, все равно выдает не русский текст.

Проблема в том, что при вызове текста из базы, выводится на странице нормальный текст, но при запросе к базе, в котором строка поиска содержит русский текст, поиск выдает нулевое значение. С чем это может быть связано, не знаю. Может кто еще чем поможет?
 

20066temp

Новичок
слово в базе данных должно тоже быть UTF-8

если заполнял базу через phpMyAdmin, то, по-моему, это сделать нельзя по-умолчанию

phpMyAdmin выдает все windows-1251 (русская версия естественно)
хотя можно включить режим UTF-8
 

msyuha

Новичок
Нет, запалняю через скрипт. Если заполнять вручную, поиск идет нормально, но вывод букв на странице происход в другой кодировке
 

SiMM

Новичок
Да человек просто походу путает, в какой кодировке у него база и в какой кодировке у него лежат данные в этой базе. Того, что он их кладёт в кодировке UTF-8 недостаточно для того, чтобы СУБД думала, что они приходят в этой кодировке.
 

msyuha

Новичок
SiMM, может подскажешь как оптимизировать запись в БД?

Для начала, я обновил PHP в денвере на пятую версию.
Попробовал iconv(); класная штука, но в данной ситуации не помогла. (Видимо у меня в БД хранится какая - то помесь кодировок!!! :) )

Может кто скажет как записывать в базу UTF-8 текст? Чтобы он там выглядел нормально?

Если никто не поможет, пойду вешаться :)
 

APMATyPA

Новичок
Все просто, у тебя БД настроена на другую кодировку, не utf-8. А данные в ней лежат как раз в utf-8. Пожтому mysql не может правильно отсортировать данные и поиск правильно произвести не может...
 

msyuha

Новичок
Автор оригинала: APMATyPA
Все просто, у тебя БД настроена на другую кодировку, не utf-8. А данные в ней лежат как раз в utf-8. Пожтому mysql не может правильно отсортировать данные и поиск правильно произвести не может...
А как мне ее настроить, если у меня нет доступа к настройке сервера на хостинге... (или настраивается в phpMyAdmin?)

Так у меня с самого начала в phpMyAdmin была кодировка utf-8.

Попробовал с помощью замены

PHP:
      $win = array("й", "ц", "у", "к", "е", "н", "г", "ш", "щ", "з", "х", "ъ", "ф", "ы", "в", "а", "п", "р",
                           "о", "л","д", "ж", "э", "я", "ч", "с", "м", "и", "т", "ь", "б", "ю",   "Й", "Ц", "У", "К",
                           "Е", "Н", "Г", "Ш", "Щ", "З", "Х", "Ъ", "Ф", "Ы",    "В", "А", "П", "Р", "О", "Л", "Д",
                            "Ж", "Э", "Я", "Ч", "С", "М", "И", "Т", "Ь", "Б", "Ю");    
                                                                                                             
       $utf=array("Р№","С†","Сѓ","Рє","Рµ","РЅ","Рі","С?","С‰","Р·","С…","СЉ","С„",
                         "С‹","РІ","Р°","Рї","СЂ","Рѕ","Р»","Рґ","Р¶","СЌ","СЏ","С‡","СЃ","Рј",
                        "Рё","С‚","СЊ","Р±","СЋ");

    for($i=0;$i<64; $i++) 
       {
   $search = str_replace('$win[$i]', 'utf[$i]', $search);  
       }
В этом случае поиск производится корректно, но большая половина букв нижнего регистра не меняется, что приводит к сбою в поиске, то есть большинство слов после замены имеют пару тройку букв другой кадировки.
 
Сверху