|
|
|
| Здравствуйте.
Я сделал поиск по базе на своем сайте и когда в поисковую форму пишу что-нибудь на английском то находит без проблем, когда же пишу на русском то нифига не находит, больше того, если я не пишу на русском сам а вставляю в поисковую форму скопированный текст который выводится из базы в браузер то в этом случае ишет и по русски.
Исходя из этого решил что проблема в кодировках, подскажите как с этим справиться.
В базе, поле по которому ищу является полнотекстовым в кодировке cp1251_general_ci, так мне пишет MySQL. Странички тоже вроде отображаются в кодеровке Кирилица ( Windows)
Так в чем тогда проблема то ? может кто сталкивался?? | |
|
|
|
|
|
|
|
для: kodges
(04.01.2007 в 10:20)
| | Поиск по какому механизму происходит? | |
|
|
|
|
|
|
|
для: 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"> <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 - 2 > 0) $page2left = ' <a href= ./index?page='. ($page - 2) .'>'. ($page - 2) .'</a> | ';
if($page - 1 > 0) $page1left = '<a href= ./index?page='. ($page - 1) .'>'. ($page - 1) .'</a> | ';
if($page + 2 <= $total) $page2right = ' | <a href= ./index?page='. ($page + 2) .'>'. ($page + 2) .'</a>';
if($page + 1 <= $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>";
?>
|
Самое интересное что сейчас все работает, непойму почему, вроде ничего не сделал.... Может есть какаято скрытая ошибка ? | |
|
|
|