Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Поиск по базе, проблема с кодировкой
 
 автор: kodges   (04.01.2007 в 10:20)   письмо автору
 
 

Здравствуйте.
Я сделал поиск по базе на своем сайте и когда в поисковую форму пишу что-нибудь на английском то находит без проблем, когда же пишу на русском то нифига не находит, больше того, если я не пишу на русском сам а вставляю в поисковую форму скопированный текст который выводится из базы в браузер то в этом случае ишет и по русски.
Исходя из этого решил что проблема в кодировках, подскажите как с этим справиться.
В базе, поле по которому ищу является полнотекстовым в кодировке cp1251_general_ci, так мне пишет MySQL. Странички тоже вроде отображаются в кодеровке Кирилица ( Windows)
Так в чем тогда проблема то ? может кто сталкивался??

   
 
 автор: cheops   (04.01.2007 в 13:04)   письмо автору
 
   для: kodges   (04.01.2007 в 10:20)
 

Поиск по какому механизму происходит?

   
 
 автор: kodges   (04.01.2007 в 13:22)   письмо автору
 
   для: cheops   (04.01.2007 в 13:04)
 

Вот вся страница чтобы было понятнее, просто она у меня и для поиска и для обычного вывода постов.

<?
    
// Переменная хранит число сообщений выводимых на станице  
                    
$num 10;  
                    
// Извлекаем из URL текущую страницу  
                    
$page $_GET['page'];  
                    
// Определяем общее число сообщений в базе данных 
                    
if(isset($_POST['search']))
                    {
                        
$strmsg=$_POST['search'];
                        
$strmsg=eregi_replace("[^A-Za-zА-Яа-я0-9]"" "$strmsg); 
                        
$strmsg=trim($strmsg); 
                        
$strmsg=eregi_replace("  "" "$strmsg);
                        
$result=mysql_query("SELECT count(*) FROM site_content WHERE MATCH(content) AGAINST('".$strmsg."')");
                        if(!
$result) exit(mysql_error());
                        if(
mysql_num_rows($result) == 0
                        echo 
"<center>По вашему запросу ничего не найдено<br>Попробуйте изменить запрос</center>";
                    }
                    else
                    {
                        if(isset(
$_GET['id'])) 
                        {
                            
$result=mysql_query("SELECT count(*) FROM site_content WHERE hidden='unlock' AND kategory='".$_GET['id']."'");
                            if(!
$result)exit(mysql_error());
                        }
                        else 
                        {
                            
$result mysql_query("SELECT count(*) FROM site_content WHERE hidden='unlock'");
                            if(!
$result)exit(mysql_error());
                        }
                    }
                    
$posts mysql_result($result,0);
                    
// Находим общее число страниц  
                    
$total intval(($posts 1) / $num) + 1;  
                    
// Определяем начало сообщений для текущей страницы  
                    
$page intval($page);  
                    
// Если значение $page меньше единицы или отрицательно  
                    // переходим на первую страницу  
                    // А если слишком большое, то переходим на последнюю  
                    
if(empty($page) or $page 0$page 1;  
                      if(
$page $total$page $total;  
                    
// Вычисляем начиная к какого номера  
                    // следует выводить сообщения  
                    
$start $page $num $num;  
                    
// Выбираем $num сообщений начиная с номера $start  
                    
if(isset($_POST['search']))
                    {
                        
$strmsg=$_POST['search'];
                        
$strmsg=eregi_replace("[^A-Za-zА-Яа-я0-9]"" "$strmsg); 
                        
$strmsg=trim($strmsg); 
                        
$strmsg=eregi_replace("  "" "$strmsg);
                        
$result=mysql_query("SELECT * FROM site_content WHERE MATCH(content) AGAINST('".$strmsg."')");
                        if(!
$result) exit(mysql_error());
                    }
                    else
                    {
                        if(isset(
$_GET['id']))
                        {
                            
$result=mysql_query("SELECT * FROM site_content WHERE hidden='unlock' AND kategory='".$_GET['id']."' ORDER BY date DESC LIMIT $start$num");
                            if(!
$result)exit(mysql_error());
                        }
                        else 
                        {
                            
$result=mysql_query("SELECT * FROM site_content WHERE hidden='unlock' ORDER BY date DESC LIMIT $start$num");
                            if(!
$result)exit(mysql_error());
                        }
                    }
                    
// В цикле переносим результаты запроса в массив $postrow  
                    
if(mysql_num_rows($result) > 0)
                    {
                        while(
$postrow[] = mysql_fetch_array($result)) 
                        
////////////////////////////////////////////////
                        
echo "<table width='100%' border='0' cellpadding='4' cellspacing='0'>";  
                        for(
$i 0$i $num$i++)
                        {
                            if(
$postrow[$i]['id'] == "") break;
                            echo 
'<tr> 
                                <td width="80%" background="images/last.jpg" height="20" align="left">&nbsp;&nbsp;<span style="color: #652200"><b>'
.$postrow[$i]['name'].'</b></span></td>
                                <td width="15%" background="images/last.jpg" height="20" align="right"><span style="color: #652200">'
.$postrow[$i]['date'].'</span></td>
                                <td width="5%" background="images/last.jpg" height="20" align="left"><span style="color: #652200">'
.$postrow[$i]['time'].'</span></td>';
                                
                                
//////Выясняем категорию
                                
$query1=mysql_query("SELECT name FROM site_kategory WHERE id='".$postrow[$i]['kategory']."'"); 
                                if(!
$query1)exit(mysql_error());
                                if(
mysql_num_rows($query1)) $kat=mysql_result($query1,0); 
                                else 
$autor "";
                                
//////Выясняем автора
                                
$query2=mysql_query("SELECT name FROM site_users WHERE id='".$postrow[$i]['autor']."'"); 
                                if(!
$query2)exit(mysql_error());
                                if(
mysql_num_rows($query2)) $autor=mysql_result($query2,0); 
                                else 
$autor ""
                                
//////Выясняем количество комментариев
                                
$query3=mysql_query("SELECT * FROM site_coment WHERE kategory='".$postrow[$i]['kategory']."' AND post='".$postrow[$i]['id']."'"); 
                                if(!
$query3)exit(mysql_error());
                                
$post=mysql_num_rows($query3);
                                
/////Выводим сам документ, категорию, автора, и количество комментариев
                                
echo "<tr>
                                            <td width='100%' colspan=3>
                                            <p align='right'>Категория: <a href='index.php?id="
.$postrow[$i]['kategory']."'><b>".$kat."</b></a> | Автор: ";
                                            if(isset(
$_SESSION['name']))
                                            {
                                                echo
"<a href='index.php?user=".$postrow[$i]['autor']."'><b>".$autor."</b></a> | Комментарий: 
                                                        <a href='index.php?post="
.$postrow[$i]['id']."&kategory=".$postrow[$i]['kategory']."'><b>".$post."</b></a>";
                                            }
                                            else
                                            {
                                                echo 
"<b>$autor</b> | Комментарий: <b>$post</b>";
                                            }
                                            echo
'</p><p align="justify">';
                                            if(
$postrow[$i]['koordinat'] == ""$postrow[$i]['koordinat'] = "left";
                                            if(
$postrow[$i]['image'] != "")
                                            echo
'<img src="image.php?id='.$postrow[$i]['id'].'" align="'.$postrow[$i]['koordinat'].'" HSPACE=15 VSPACE=5>';
                                            if(isset(
$_POST['search']))
                                            {
                                                
$word $_POST['search'];
                                                echo 
preg_replace("#\b$word.*\b#Uis""<b style='background-Color:yellow;'>\\0</b>"$postrow[$i]['content']);
                                            }
                                            else
                                            {
                                                echo 
$postrow[$i]['content'];
                                            }
                                            echo 
'</p>';
                                            if(isset(
$_SESSION['name']))
                                            {
                                                echo 
"<p align='left'><b>";
                                                if(
$postrow[$i]['link'] != "")echo"<a href='".$postrow[$i]['link']."'>скачать</a>";
                                                if(
$postrow[$i]['crack'] != "")echo" | <a href='".$postrow[$i]['crack']."'>кряк</a>";
                                                if(
$postrow[$i]['rusifikator'] != "")echo" | <a href='".$postrow[$i]['rusifikator']."'>русификатор</a>";
                                                echo 
"</b></p>";
                                            }
                                            else
                                            {
                                                echo
"<p align='left'><b><i>Скачивать могут только зарегистрированные пользователи</i></b></p>";
                                            }
                                            echo
"</td></tr>";
                        }
                        echo 
"</table>";
                    }
                    
/////////////////////////////////////////////////
                    // Проверяем нужны ли стрелки назад  
                    
if ($page != 1$pervpage '<a href= ./index?page=1><<</a>  
                                                   <a href= ./index?page='
. ($page 1) .'><</a> ';  
                    
// Проверяем нужны ли стрелки вперед  
                    
if ($page != $total$nextpage ' <a href= ./index?page='. ($page 1) .'>></a>  
                                                       <a href= ./index?page=' 
.$total'>>></a>';  
                    
// Находим две ближайшие станицы с обоих краев, если они есть  
                    
if($page 0$page2left ' <a href= ./index?page='. ($page 2) .'>'. ($page 2) .'</a> | ';  
                    if(
$page 0$page1left '<a href= ./index?page='. ($page 1) .'>'. ($page 1) .'</a> | ';  
                    if(
$page <= $total$page2right ' | <a href= ./index?page='. ($page 2) .'>'. ($page 2) .'</a>';  
                    if(
$page <= $total$page1right ' | <a href= ./index?page='. ($page 1) .'>'. ($page 1) .'</a>'
                    
// Вывод меню  
                    
echo"<center>";
                    echo 
$pervpage.$page2left.$page1left.'<b>'.$page.'</b>'.$page1right.$page2right.$nextpage;
                    echo
"</center>";
                    
?>


Самое интересное что сейчас все работает, непойму почему, вроде ничего не сделал.... Может есть какаято скрытая ошибка ?

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования