- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Что делать, если ваша email-рассылка попала в спам
10 распространенных причин и решений
Екатерина Ткаченко
VK приобрела 70% в структуре компании-разработчика red_mad_robot
Которая участвовала в создании RuStore
Оксана Мамчуева
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Нужен обычный поиск в БД, он везде расписан на страницах инета....
Но как-то умалчивается везде про вывод информации. Нужно же, помимо ссылки и тайтла показать кусок текста с поисковым словом. Про это нигде в инете не смог найти нужную инфу.
В текстовой ячейке с контентом в таблице БД имеем одно или несколько совпадений.
Что дальше?
Как показать одну строку текста а не всю ячейку с полным текстом? Есть ли такая функция для Mysql?
Ведь в ней находятся совпадения независимо от регистра, даже для кирилицы.
А если искать строку в тексте с совпадением с помощью строковых функций или регулярных выражений, опять же всплывает проблема с игнорированием регистра (i) для кирилицы.
В инете все советуют преборазовать текст и запрос в нижний регистр.
И показывать строки с маленькими буквами...?
Вобщем для меня, чайника, это ступор.
Как быть? Что можно сделать, чтобы показать одну строку текстового поля из таблицы, независимо от регистра?
Независимость от регистра - collation(для поля) MySQL. Для кодировки utf-8 это utf8_general_ci(case independent вроде расшифровывается).
На счет существования готовой функции не уверен, но что можно написать свою функцию(именно для MySQL) знаю точно.
case independent вроде расшифровывается
ci - case isensitive :)
cs - case sensitive
Нужно же, помимо ссылки и тайтла показать кусок текста с поисковым словом. Про это нигде в инете не смог найти нужную инфу.
И что мешает его показать? Или чего-то не так понимаю?
Как показать одну строку текста а не всю ячейку с полным текстом? Есть ли такая функция для Mysql?
Не знаю как насчет одной строки, но можно обрезать начиная с нужной позиции (там, где встречается ключевое слово) нужное количество символов. Это можно сделать даже на php
Так в MySQL всё нормально ищется. Совпадения как раз не зависят от регистра.
Тут стоит вопрос - как показать часть текста с совпадением в результатах поиска?
Независимость от регистра для кирилицы нужна при поиске строки в тексте, если нет возможости показать нужный кусок из большого текста БД.
---------- Добавлено 06.07.2013 в 23:08 ----------
И что мешает его показать? Или чего-то не так понимаю?
Так ведь выводится весь контент страницы из ячейки.
А как показать часть текста из БД с нужным совпадением?
---------- Добавлено 06.07.2013 в 23:10 ----------
но можно обрезать начиная с нужной позиции (там, где встречается ключевое слово) нужное количество символов. Это можно сделать даже на php
КАК????
Строковыми функциями? Регулярками? Так проблема с регистром в кириллице появится.
КАК????
Строковыми функциями? Регулярками? Так проблема с регистром в кириллице появится.
Как? Просто. Получить позицию подстроки в строке http://php.net/manual/en/function.strpos.php
Обрезать строку http://www.php.net/manual/ru/function.substr.php
Для работы регистр-независимого поиска также есть аналогичные функции.
Для работы с многобайтовыми кодировками есть mbstring функции - mb_*
$pos = mb_stripos($string, $keyword, null, 'windows-1251');
if($pos !== false) echo substr($string, $pos, 50);
else echo 'Not found';
Вот mb_ я пока не пробовал... Но просто функции с i не помогают.
Щас испытаю...
Спасибо!
---------- Добавлено 06.07.2013 в 23:58 ----------
Работает!!!
Спасибо!
А можно сделать так, чтоб ключевое слово было не в начале а в середине...?
А можно сделать так, чтоб ключевое слово было не в начале а в середине...?
$pos - н-количество символов. И тут хорошо проверить если позиция не отрицательная, или же установить в ноль.
Хорошо бы вывести строчку целиком, как она есть в тексте. От \n до \n .
Я до этого сделал регулярным выражением типа
$strrr = preg_match("/.*($word).*/i", $text, $arr)
Как раз строчка получается. Но регистр в кирилице попутал все карты
Как раз строчка получается. Но регистр в кирилице попутал все карты
$strrr = preg_match_all("/.*($word).*/iu", $text, $arr);ivan-lev,
C флагом /iu вообще не находит совпадений.. даже при поиске цифр.
print_r($arr) выводит Array ( [0] => Array ( ) [1] => Array ( ))
У меня кодировка windows-1251 на сайте. И после соединения прописано mysql_query("SET NAMES cp1251");
u это для UTF-8 вроде....?
Примерно такой вариант наверное устроит..
Разбил контент на строчки по \n и вывожу строчки с совпадениями
$text = explode ("\n", $text);foreach ($text as $t)
{
$pos = mb_stripos($t, $words, null, 'windows-1251');
if($pos !== false) echo $t;
}
Всем спасибо!
Если будут предложены другие варианты вывода куска текста из контента, с учётом регистра в кирилице, опять же, буду благодарен.