Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Проблема с кодировкой PHP + MySQL

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Shatun
Отправлено: 29 Апреля, 2007 - 10:37:21
Post Id



Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Апр. 2007  
Откуда: Раменское


Помог: 0 раз(а)




Уже давно сделал поиск смайлов на сайте по ключевым словам, но вот в процессе использования этого скрипта многие не находят то, что ищут.
Например –в WIN1251 выглядит вот так - репа
А вот в кодировке Юникод (UTF8-8) означает Репа
Видимо у человека который осуществляет поиск по умолчанию установлена кодировка (UTF8-8) отсюда и возникает проблема т.е. такого слова в базе нет и скрипт сообщает, что мол нет такого.
Причём заметил что ищут с различными кодировками.


не очень хорошо знаю PHP, пожалуйста помогите решить эту проблему готовым куском кода.

Не сочтите за рекламу вот как это выглядит http://www[dot]animac[dot]ru/modules.php[dot][dot][dot]ile=searh_smiles
 
 Top
-SCHATTEN-
Отправлено: 29 Апреля, 2007 - 11:42:56
Post Id



Пользователь


Покинул форум
Сообщений всего: 615
Дата рег-ции: Июль 2006  
Откуда: Оттуда !


Помог: 0 раз(а)




Мало чего понял, покажи сам скрипт поиска, или обьясни как он работает.
 
 Top
Shatun
Отправлено: 29 Апреля, 2007 - 14:43:24
Post Id



Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Апр. 2007  
Откуда: Раменское


Помог: 0 раз(а)




-SCHATTEN-, благодарю за то, что желаешь помочь!

Так понимаю перед тем как запускается поиск в БД
$query должна быть в кодировке WIN 1251
может использовать
$query = convert_cyr_string ($query,w,k)
но у меня ничего не получается

код скрипта здесь – http://www[dot]animac[dot]ru/search[dot]txt
удалил некоторые функции (которые не имеют отношения к поиску) и для восприятия (моего кривого кода) прокомментировал действия
 
 Top
valenok
Отправлено: 29 Апреля, 2007 - 18:41:06
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


Помог: 3 раз(а)




После подключения
PHP:
скопировать код в буфер обмена
  1.  
  2.  <?PHP  
  3.      mysql_query ("SET NAMES `cp1251`");  
  4.      mysql_query ("set character_set_client='cp1251'");    
  5.      mysql_query ("set character_set_results='cp1251'");    
  6.      mysql_query ("set collation_connection='cp1251_general_ci'");    
  7.    ?>
  8.  


и везде не WIN1251 а cp1251

Должно помочь.
Теперь в начале скрипта:
PHP:
скопировать код в буфер обмена
  1.  
  2. header('Content-Type: text/html; charset=cp1251');
  3.  


-----
Truly yours, Sasha.
 
My status
 Top
Shatun
Отправлено: 29 Апреля, 2007 - 22:06:01
Post Id



Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Апр. 2007  
Откуда: Раменское


Помог: 0 раз(а)




valenok спасибо!

С
PHP:
скопировать код в буфер обмена
  1. <? header('Content-Type: text/html; charset=cp1251'); ?>

всё понятно

Но куда только не прикручивал
PHP:
скопировать код в буфер обмена
  1. <?       mysql_query ("SET NAMES `cp1251`");    
  2.       mysql_query ("set character_set_client='cp1251'");    
  3.       mysql_query ("set character_set_results='cp1251'");    
  4.       mysql_query ("set collation_connection='cp1251_general_ci'");     ?>

ничего не вышло. Водимо потаму что чайник и понять не могу как правильно прикрутить.

подскажите пожалуйста на примере.
Например есть запрос

PHP:
скопировать код в буфер обмена
  1. <?       $result = mysql_query("SELECT searh_query FROM ".$prefix."_imagegallery_search WHERE searh_query = '".$query."' "); ?>

как к нему правильно прикрутить вышеуказанный код?
 
 Top
valenok
Отправлено: 29 Апреля, 2007 - 22:55:14
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


Помог: 3 раз(а)




PHP:
скопировать код в буфер обмена
  1.  
  2. <?
  3. mysql_connect('local','root','');
  4.  
  5. mysql_query ("SET NAMES `cp1251`");    
  6. mysql_query ("set character_set_client='cp1251'");      
  7. mysql_query ("set character_set_results='cp1251'");      
  8. mysql_query ("set collation_connection='cp1251_general_ci'");
  9.  
  10. $result = mysql_query("SELECT searh_query FROM ".$prefix."_imagegallery_search WHERE searh_query = '".$query."' ");
  11.  



-----
Truly yours, Sasha.
 
My status
 Top
Shatun
Отправлено: 30 Апреля, 2007 - 08:57:45
Post Id



Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Апр. 2007  
Откуда: Раменское


Помог: 0 раз(а)




Ничего не выходит.

Может неправильно проверяю на локалке…

Что делаю:
Открываю страницу с поиском и принудительно указываю другую кодировку. Например - KOI8-R
(вид > кодировка >кирилица KOI8-R )
затем в поле поиска ($query) пишу привет жму найти, ничего не происходит.
Пишет - Искали: РТЙЧЕФ
Т.е. получается, что не перекодирует перед тем как искать привет в БД
нашёл готовый скрипт - перекодирование в нужную кодировку

PHP:
скопировать код в буфер обмена
  1. <?
  2. ########################################################
  3. // определение кодировки текста и перекодирование в нужную
  4. ########################################################
  5.  
  6. function convert_cyr_text($text,$convert_to=""){                                 // detect codepage of $text and return converted to $convert_to
  7. // Swed  http://collection.com.ua/webmaster
  8.   if(!$code_page)$convert_to = "w";                                              // by default convert to windows-1251
  9.   $countChars = count_chars($text);                                              // cont chars of text
  10.   $sums = array(                                                                 // set sums for each codepage
  11.    "w" => array("small" => array_sum(array_slice($countChars,224,32)),           // windows-1251 small chars
  12.                 "cap"   => array_sum(array_slice($countChars,192,32))),          // capitalize chars
  13.    "k" => array("small" => array_sum(array_slice($countChars,192,32)),           // koi8-r
  14.                 "cap"   => array_sum(array_slice($countChars,224,32))),
  15.    "i" => array("small" => array_sum(array_slice($countChars,208,32)),           // iso8859-5
  16.                 "cap"   => array_sum(array_slice($countChars,176,32))),
  17.    "a" => array("small" => array_sum(array_slice($countChars,160,16))+           // cp866
  18.                              array_sum(array_slice($countChars,224,16)),
  19.                 "cap"   => array_sum(array_slice($countChars,128,32))),
  20.    "m" => array("small" => array_sum(array_slice($countChars,223,32)),           // x-mac-cyrillic
  21.                 "cap"   => array_sum(array_slice($countChars,128,32))),
  22.   );
  23.   $max = max($sums);                                                             // get max values
  24.   foreach ($sums as $name => $codepage)
  25.    if ($codepage == $max) $convert_from = $name;                                 // get name current codepage
  26.   if ($convert_from == $convert_to) return $text;                                // retrun not converted
  27.   return convert_cyr_string($text,$convert_from,$convert_to);                    // return converted
  28. }
  29. ?>


может им можно воспользоваться заменив в нём $text на $query?
Попробовал, ничего не получилось Недовольство, огорчение Может нужно ещё что добавить? Или не правильно тестю работу скрипта?
Подскажите люди добрые как кодировку ненужную побороть..
 
 Top
evgenijj
Отправлено: 30 Апреля, 2007 - 10:24:47
Post Id



Участник


Покинул форум
Сообщений всего: 1212
Дата рег-ции: Авг. 2006  
Откуда: Москва


Помог: 10 раз(а)




Это очень примитивный алгоритм.

http://phpclub[dot]ru/faq/wakka.php?[dot][dot][dot]dings/encodings4
учитывает частоту повторения русских букв в тексте.

http://popoff[dot]donetsk[dot]ua/text/wo[dot][dot][dot]/libs/a/charset/
По заверению автора "функция специальным образом оптимизирована для конвертирования коротких фраз".

Но вообще, если строка, кодировку которой требуется определить, состоит всего из одного слова, вероятность неправильного определения кодировки будет велика.
 
 Top
Shatun
Отправлено: 30 Апреля, 2007 - 11:04:29
Post Id



Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Апр. 2007  
Откуда: Раменское


Помог: 0 раз(а)




Уххх... ЁПРСТ!
evgenijj спасибо огромнейшее!
Как раньше не нашёл эту инф.
Пробую. Если получится отишись в этом посте.
 
 Top
Shatun
Отправлено: 05 Мая, 2007 - 00:19:35
Post Id



Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Апр. 2007  
Откуда: Раменское


Помог: 0 раз(а)




Не получается Огорчение

Сам скрипт работает прекрасно..
Т.е. если создаю файл win.php в который полностью копирую библиотеку -
a.charset (скаченную Здесь )
а в самом конце пишу в различных кодировках
PHP:
скопировать код в буфер обмена
  1.  echo charset_x_win("свадьба")."- utf-8 <br />";
  2. echo charset_x_win("РТЙЧЕФ")." - koi-8r <br />";
  3. echo charset_x_win("ЯаШТХвФ")." - ISO не поддерживается :( <br />";

всё вроде работает:

свадьба- utf-8
привет - koi-8r
ЯаШТХвФ - ISO не поддерживается Недовольство, огорчение


Но как подцепить эту библиотеку к себе никак понять не могу Недовольство, огорчение
========

Всем огромнейшее спасибо!!


Может кому пригодиться

PHP:
скопировать код в буфер обмена
  1.  
  2. // вначале файла
  3. require("a.charset.php");
  4. // перед MySQL запросом переменная проверяется
  5. $query = charset_x_win($query);



Вы мне очень помогли!!
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB