Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Поиск по сайту. Помогите поправить 
V
    Опции темы
Cobalt
Дата 12.10.2011, 07:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 124
Регистрация: 31.8.2006

Репутация: нет
Всего: 1



вообщем проблема простая, поправить и сделать не зависимый от регистра поиск, но он не делается, на пхп я никогда ничего не писал, и сайт не мой, но код почитал кой как
код всего:

это на страничке блок
Код

<FORM NAME='search' action='search.php' METHOD=post STYLE="margin:0px;">
                <TR>
                    <TD WIDTH=130><INPUT style=" padding:0px; width:118px; height:14px" 
CLASS='search1' NAME='str' TYPE='text' SIZE=24 VALUE='Поиск' 
onClick="javascript:this.value='';"></TD>
                    <TD WIDTH=3><IMG alt="" SRC="_img/sep.gif" WIDTH=3 HEIGHT=21></TD>
                    <TD WIDTH=21><INPUT TYPE='image' SRC="_img/searchbutton.gif" 
style="width:25px; height:21px" name=enter ALT="Искать" TITLE="Искать"></TD>
                    <TD WIDTH=3><IMG alt="" SRC="_img/sep.gif" WIDTH=3 HEIGHT=21></TD>
                </TR>
                </FORM>


search.php, кусок
Код

<?php
error_reporting(0);
session_start();
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
//бла бла бла

<?php
include("init.php");
if (isset($_SESSION['str2'])) $str2=$_SESSION['str2'];
if (isset($_GET['str'])) $str=$_GET['str'];
if (isset($_GET['offset'])) $offset=$_GET['offset'];
if (isset($_POST['str'])) $str=$_POST['str'];


function key_word($s,$key)
{
 return ;
}

function seek($dir,$base)
{
 $path=$base;
 if($dir!='')$path.='/'.$dir;
 $handle=opendir($path);
 while ($file=readdir($handle))
 {
  if($file!='.'&&$file!='..')
  {
   if(is_dir($path.'/'.$file)) seek(($dir!=''?$dir.'/'.$file:$file),$base);
    else do_file("$path/$file");
  }
 }
 closedir($handle);
}

function do_file($file)
{
 if(strpos($file,'search.php')>0)return;
 global $mask_strings,$str,$context_chars,$search_results;
 $b=false;
 for($i=0;$i<count($mask_strings);$i++)if(strpos($file,$mask_strings[$i])>0)$b=true;
 if(!$b)return;
 $fd=fopen($file,"r");
 $contents=fread($fd,filesize($file));
 fclose($fd);
 $cts=strip_tags($contents);
 $ts=strtolower($cts);
 $str11=strtolower($str); //это написал Я, но толку 0
 $n=strpos($ts,$str11); //менял на stripos, но толку 0
 if($n===false)return;
 $start=$n-$context_chars;
 $len=$context_chars*2;
 if($start<0){$len+=$start;$start=0;};
 if($start+$len>strlen($cts))$len-=$start+$len-strlen($cts);
 $s=substr($cts,$start,$len);
 $s1=substr($ts,$start,$len);
 $d1=strpos($contents,'<title');
 if(!$d1)$d1=strpos($contents,'<TITLE');
 if(!$d1)
 {
  $t=strpos($file,'/');
  $title=substr($file,$t+1,strlen($file)-$t);
  //$title='untitled document';
 }else
 {
  $d1=strpos($contents,'>',$d1)+1;
  $d2=strpos($contents,'<',$d1)-$d1;
  $title=substr($contents,$d1,$d2);
 }


 $arr_t=explode($str,$s1);
 $qq=count($arr_t);
 $k=strlen($arr_t[0]);
 $s2=substr($s,0,$k);
 $k1=strlen($str);
 for($i=1;$i<count($arr_t);$i++)
 {
  $t=strlen($arr_t[$i]);
  $s2.='<span style="color: red; font-weight: bold">'.substr($s,$k,$k1).'</span>'.substr($s,$k+$k1,$t);
  $k+=$t+$k1;
 }
$s=$s2;

//результат поиска/////////////////////////////////////////////////////////////////////////////
 $s="<h1 STYLE='font-size: 11px;'><a href='$file' STYLE='color: #545454; text-decoration: underline;'>$title</a></h1><br><h2>...{$s}...</h2><br>";


 array_push($search_results,$s);
}

if(!isset($offset))$offset=0;
if(isset($str))
{
 session_register("str2");
 $_SESSION['str2']=$str;

}else $str=$str2;
$search_results=array();
$str=strtolower($str);
//echo(strlen($str));
if(strlen($str)!=0||!isset($str))seek('',$root_dir);

//ничего не найдено////////////////////////////////////////////////////////////////////////////
if(count($search_results)==0)echo('<TR ALIGN=center><TD><h1 aligh="center">По вашему запросу ничего не найдено</h1></TD></TR>');
else

{

//врхний блок найденных страниц (1-10 11-20)///////////////////////////////////////////////////
echo('<TR ALIGN=center><TD><H1 STYLE="font-size: 11px;">');
$num=floor((count($search_results)+0.0)/$results_per_page);
for($i=0;$i<$num;$i++)
if($offset==$i*$results_per_page)
echo('<a href="search.php?offset='.($i*$results_per_page).'" STYLE="color: #950137; text-decoration: none;">'.
 ($i*$results_per_page+1).'-'.(($i+1)*$results_per_page).'</A> ');else
echo('<a href="search.php?offset='.($i*$results_per_page).'" STYLE="color: #545454; text-decoration: underline;">'.
 ($i*$results_per_page+1).'-'.(($i+1)*$results_per_page).'</A> ');

$num1=count($search_results)%$results_per_page;
if($num1!=0)
{
 if($offset==$num*$results_per_page)

 //исправь
 echo('<a href="search.php?offset='.($num*$results_per_page).'" STYLE="color:  #950137; text-decoration: none;">'.
  ($num*$results_per_page+1).'-'.($num*$results_per_page+$num1).'</a></TD></TR>');else
 echo('<a href="search.php?offset='.($num*$results_per_page).'" STYLE="color:  #545454; text-decoration: underline;">'.
  ($num*$results_per_page+1).'-'.($num*$results_per_page+$num1).'</a></TD></TR>');
}
echo('</H1></TD></TR>');

echo('<TR><TD>');
for($i=0;$i<$results_per_page;$i++)echo($search_results[$i+$offset]);
echo('</TD></TR>');


//нижний блок найденных страниц (точно как верхний)/////////////////////////////////////////////
echo('<TR ALIGN=center><TD><h1 STYLE="font-size: 11px;">');
$num=floor((count($search_results)+0.0)/$results_per_page);
for($i=0;$i<$num;$i++)
if($offset==$i*$results_per_page)
echo('<a href="search.php?offset='.($i*$results_per_page).'" STYLE="color:  #950137; text-decoration: none;">'.
 ($i*$results_per_page+1).'-'.(($i+1)*$results_per_page).'</A> ');else
echo('<a href="search.php?offset='.($i*$results_per_page).'" STYLE="color: #545454; text-decoration: underline;">'.
 ($i*$results_per_page+1).'-'.(($i+1)*$results_per_page).'</A> ');

$num1=count($search_results)%$results_per_page;
if($num1!=0)
{
 if($offset==$num*$results_per_page)

 //исправь
 echo('<a href="search.php?offset='.($num*$results_per_page).'" STYLE="color: #950137; text-decoration: none;">'.
  ($num*$results_per_page+1).'-'.($num*$results_per_page+$num1).'</a></TD></TR>');else
 echo('<a href="search.php?offset='.($num*$results_per_page).'" STYLE="color: #545454; text-decoration: underline;">'.
  ($num*$results_per_page+1).'-'.($num*$results_per_page+$num1).'</a></TD></TR>');
}
echo('</h1>');
}

?>


init.php
Код

<?php
//директория для поиска (для текущей='.')
$root_dir='.';

//маска файлов поиска (например $mask_strings=array('htm','txt','asp')
$mask_strings=array('htm','html','txt');

//количество выводимых на странице результатов
$results_per_page=10;

//количество выводимых символов слева и справа от ключевого слова
$context_chars=200;
?>



 $str11=strtolower($str); //это написал Я, но толку 0
 $n=strpos($ts,$str11); //менял на stripos, но толку 0

изначально думал ща на stripos поменяю, и буду в шоколаде, однако весь день экспериментировал, жижа получилась похожая по цвету и консистенции, но это не шоколад

Помогите кто чем может, наседает директор

Это сообщение отредактировал(а) Cobalt - 12.10.2011, 07:46
--------------------
Стоишь на берегу И чувствуешь соленый запах ветра, Что веет с моря,И знаешь что свободен ты, и жизнь лишь началась....И губы жжет.. подруги поцелуй, Пропитанный слезой!
PM MAIL ICQ   Вверх
ayax2005
Дата 12.10.2011, 08:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


echo $smile
**


Профиль
Группа: Участник
Сообщений: 516
Регистрация: 17.4.2008
Где: Питер

Репутация: 2
Всего: 11



Для начала, в какой кодировке работаете? Если в UTF-8, то нужно использовать мультибайтовые аналоги строковых функций.
Да и вообще, мне кажется поиск должен строится на регулярных выражениях.


--------------------
все вопросы - из-за неверной формулировки задачи
PM MAIL ICQ   Вверх
Cobalt
Дата 12.10.2011, 08:32 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 124
Регистрация: 31.8.2006

Репутация: нет
Всего: 1



Цитата(ayax2005 @  12.10.2011,  09:00 Найти цитируемый пост)
Для начала, в какой кодировке работаете? 

Windows-1251
а что, есть разница в данном вопросе?


Цитата(ayax2005 @  12.10.2011,  09:00 Найти цитируемый пост)
Да и вообще, мне кажется поиск должен строится на регулярных выражениях. 

писалось это незнамо кем лет так 6-7 назад, на код FORM посмотрите
--------------------
Стоишь на берегу И чувствуешь соленый запах ветра, Что веет с моря,И знаешь что свободен ты, и жизнь лишь началась....И губы жжет.. подруги поцелуй, Пропитанный слезой!
PM MAIL ICQ   Вверх
Cobalt
Дата 12.10.2011, 09:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 124
Регистрация: 31.8.2006

Репутация: нет
Всего: 1



людииии smile 

написал 
Код

if (isset($_SESSION['str2'])) $str2=$_SESSION['str2'];
if (isset($_GET['str'])) $str=$_GET['str'];
if (isset($_GET['offset'])) $offset=$_GET['offset'];
if (isset($_POST['str'])) $str=$_POST['str'];
$str=strtolower($str);
echo($str);


отправил тестовый поиск, и strtolower не сработала, вывелась мне такая же строка с теми же большими буквами, че за */:?*%?
--------------------
Стоишь на берегу И чувствуешь соленый запах ветра, Что веет с моря,И знаешь что свободен ты, и жизнь лишь началась....И губы жжет.. подруги поцелуй, Пропитанный слезой!
PM MAIL ICQ   Вверх
Cobalt
Дата 12.10.2011, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 124
Регистрация: 31.8.2006

Репутация: нет
Всего: 1



кажется понятно...

Что делать если php функция strtolower не работает?

Ответ обычно прост: причина - не правильно установленна "родная" кодировка, что, в итоге, приводит к потере русских букв в результирующей переменной.
Решение напрашивается само собой:
Код

// устанавливаем русскую кодировку
setlocale(LC_ALL, "ru_RU.CP1251");
// переводим в нижний регистр
$string = strtolower( $string );

Но есть и альтернативный путь. Более медленно, но намного надежнее в результате:
Код

//заменить все вхождения соответствующими символами
$string = strtr( $string, 'ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮЁ', 'йцукенгшщзхъфывапролджэячсмитьбюё' );

http://m15.ru/problems_with_function_strtolower
--------------------
Стоишь на берегу И чувствуешь соленый запах ветра, Что веет с моря,И знаешь что свободен ты, и жизнь лишь началась....И губы жжет.. подруги поцелуй, Пропитанный слезой!
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1152 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.