1

Тема: Пропала выдача в поиске

strawberry_1.1.1
Здравствуйте есть проблема,  перестает работать поиск по новостям, после того как настроил шаблон полной новости. говорит что не может найти, хотя новость есть. Пробовал переустановить скрипт не меняя шаблона все работает, редактируеш шаблон и показывает только старые записи, а новые не ищет.
Помогите разобраться. Спасибо

Отредактировано виталий (03 Apr 2010 13:26:16)

Re: Пропала выдача в поиске

он ищет не совсем по шаблонам или по базе. он создает свой файлик data/search.txt где указываются номер новости и слово. По этому слову и ищет. Как решение могу предложить очистить этот файл и запустить поиск 2 раза (первый раз он перезапишет файл, а второй уже должен корректно искать по нему).

Здесь молодость бродит крылато, и старость не клонит голов...
Демо площадка Strawberry 1.2 - заходим и тестируем!

3

Re: Пропала выдача в поиске

Спасибо вроде заработало
Но при добовлении новых новостей, поиск их не выдает.
Каждый раз обновлять файл устанешь
Подскажите еще варианты.

Отредактировано виталий (05 Apr 2010 03:14:27)

Re: Пропала выдача в поиске

виталий пишет:

Подскажите еще варианты.

Взять файл show_search.php из сборки Strawberry 1.0.2.

Re: Пропала выдача в поиске

Strawberry 1.1.1

Есть два одинаковых сайта, на одном поиск работает, на другом ищет только слова на латинице. Заметил что у неработающего в search.txt какраз таки не записываются русские слова. Брал show_search.php с работающего сайта, со старых версий, search.txt чистил — не помогает. Что это может быть?

Re: Пропала выдача в поиске

Khoth, языковые установки, и только они! Хостер изменил кодировку по умолчанию, изменил локаль, или вообще запретил установку локали. Попробуйте варианты:

1. Правильно выставьте локаль. Примеры:

<? setlocale(LC_CTYPE, 'ru_RU.CP1251'); ?>

<? setlocale(LC_CTYPE, 'ru_RU'); ?>

Действующую локаль можно запросить у хостера.

2. В файле inc/db/mysql.class.php найдите строки:

if ($charset){
    mysql_query('set names '.$charset.';', $this->link);
}

и добавьте:

else {mysql_query("set names cp1251;",$this->link);}

или вообще вместо них напишите:

mysql_query("set names cp1251;",$this->link);

Где cp1251 - действующий чарсет вашей базы данных.

Re: Пропала выдача в поиске

Спасибо большое, помогло! smile

Re: Пропала выдача в поиске

Khoth, что именно помогло? Напишите, чтобы следующие поколения не поднимали подобных тем.

Re: Пропала выдача в поиске

Абсолютно похожая проблема - поиск работал нормально, а потом перестал... Что все-же помогло? Где нужно правильно выставлять локаль?

10

Re: Пропала выдача в поиске

6y пишет:

Где нужно правильно выставлять локаль?

Сразу после подключения файла head.php

11

Re: Пропала выдача в поиске

Все проблемы языковых установок относятся и к текстовому режиму или только SQL?
У меня Strawberry 1.1.1, текстовый режим. Проблема точь в точь как у Khoth. Ищет только латиницу. Все что написано в 6 делал. Проблема остается.

12

Re: Пропала выдача в поиске

pavlenty, и к текстовому тоже. И если бы Khoth написал - что именно ему помогло (как я просил), проблем было бы меньше.

Для начала попробуйте создать php-страницу с таким контентом:

<?='Текущая локаль: '.setlocale(LC_ALL, 'ru_RU.CP1251', 'ru_RU.cp1251', 'ru_RU', 'RU', 'koi8-r', 'ru_RU.KOI8-R', 'UTF-8', 'ru_RU.UTF-8', 'utf-8', 'ru_RU.utf-8', 'rus_RUS.CP1251', 'Russian_Russia.1251', 'russian'); ?>

И запустите её. Вам будет выдана текущая локаль, например:

Текущая локаль: ru_RU

Установите эту локаль:

<? setlocale(LC_CTYPE, 'ru_RU'); ?>

Если ничего не будет выдано, значит на хосте установлена какая-то особая локаль (т.е. ни одна из перечисленных мной). Тогда спросите о ней у хостера и дальше не читайте.

Если вам выдана локаль, которая у вас уже и так установлена в setlocale, то попробуйте следующий совет:

Посмотрите, в какой кодировке у вас текстовая база, может быть локаль здесь вовсе не при чём. Откройте например файл data/db/base/story.MYD в каком-нибудь просмотрщике или редакторе, который поддерживает разные кодировки (советую Lister или AkelPad от Total Commander'а), и посмотрите в какой кодировке открылся файл.

И ещё. Тема называется "Пропала выдача в поиске". У вас тоже пропала, или с момента установки не работала? Если была и пропала, значит однозначно локаль - её сменил хостер. Если не было "с нуля", то могут быть оба варианта.

13

Re: Пропала выдача в поиске

ANT-Soft, спасибо Вам за четкие, исчерпывающие ответы!
У меня не работает с момента установки. Сегодня доберусь, все проверю.

21 час, 7 минут и 6 секунд спустя:

У меня "Текущая локаль: ru_RU.CP1251"
Я ставил <? setlocale(LC_CTYPE, 'ru_RU.CP1251'); ?>

Далее смотрел текстовую базу data/db/base/story.MYD FAR-ом и Total-ом файл в кодировке CP1251 Windows

21 час, 9 минут и 43 секунды спустя:

О! теперь поиск работает! big_smile

Скопировал ru_RU.CP1251 с выданного результата на странице
<?='Текущая локаль: '.setlocale(LC_ALL, 'ru_RU.CP1251', 'ru_RU.cp1251', 'ru_RU', 'RU', 'koi8-r', 'ru_RU.KOI8-R', 'UTF-8', 'ru_RU.UTF-8', 'utf-8', 'ru_RU.utf-8', 'rus_RUS.CP1251', 'Russian_Russia.1251', 'russian'); ?>

И поставил в <? setlocale(LC_CTYPE, 'ru_RU.CP1251'); ?>
Причем, заметил, что у меня было написано тоже самое проверил посимвольно big_smile

ANT-Soft Спасибо!!!

Отредактировано pavlenty (31 Aug 2010 07:09:22)

Re: Пропала выдача в поиске

ANT-Soft,
А если  у меня стоит локаль на сервере: "en_US.UTF-8"
Ставлю после header:

<? setlocale(LC_CTYPE, 'en_US.UTF-8'); ?>

И при этом поиск работает только по англиски, то как быть дальше?

strawberry у меня на mysql, а на mysql по умолчанию кодировака cp1251

15

Re: Пропала выдача в поиске

HumanQ, сопоставьте:

HumanQ пишет:

en_US.UTF-8

и:

HumanQ пишет:

поиск работает только по англиски

и сделайте вывод самостоятельно wink

Локаль английская, база русская => поиск ничего не найдёт! Ну ладно, была бы локаль ru_RU.UTF-8, можно было бы победить функцией:

$text = iconv('utf-8', 'windows-1251', $text);

а так - полная Ж.

Кстати, а что у вас за хост? Если русский - на нём ОБЯЗАНА быть русская локаль в наборе. Если кодировка MySQL русская, значит хост русский, или, как минимум, поддерживающий русские локали.

Re: Пропала выдача в поиске

да вывод-то понятно что я сделал:) Просто расписал для наглядности:cool:

Сервер свой у нас.  Админ менять локаль в "etc\default\locale" не советует, говорит что может что-то поломаться. Я хз что делать.

Пойду видимо гуглить на тему как добавить локаль.

5 дней, 1 час и 24 минуты спустя:

ANT-Soft пишет:

была бы локаль ru_RU.UTF-8, можно было бы победить функцией:

$text = iconv('utf-8', 'windows-1251', $text);

ANT-Soft, а где это нужно написать? Вроде как решили поменять локаль на ru_RU.UTF-8.

Хотя для меня до сих пор загадка в чем там проблема и чем en_EN.UTF  отличается от ru_RU.UTF

17

Re: Пропала выдача в поиске

HumanQ, ок!

1. Когда поменяете локаль, воспользуйтесь советом из поста #12 для настройки локали на сайте.
2. Узнайте кодировку своего файла data/search.txt
3.1. Если это UTF-8, то ничего больше делать не нужно.
3.2. Если cp1251 (что вряд ли), то найдите в файле show_search.php строку:

$index  = file($file);

и добавьте после неё:

for($i=0; $i<count($index); $i++) {
  $index[$i] = iconv('windows-1251', 'utf-8', $index[$i]);
}

Как-то так.

HumanQ пишет:

чем en_EN.UTF  отличается от ru_RU.UTF

Да многим! Ну да, и та и другая локаль поддерживают русские символы, но в локали определены ещё: языковые установки (они, в частности, здорово влияют на работу строковых функций PHP), стандарты страны (валюта, часовые пояса...), правила формирования чисел (например - десятичных дробей: "0.5" или "0,5"; записи разрядов - тысяча: "1000" или "1.000") и т.д. и т.п. и п.х.

Постараюсь ответить на ваш вопрос более конкретно и попроще: русские символы и русские языковые установки - это немного разные вещи. Например, работа функции strtolower (перевод символов строки в нижний регистр) для разных локалей и разных языков будет работать по-разному. В английской локали русские буквы "Ж" и "ж" - это совершенно два разных символа, никак между собой не связанных, и только русская локаль "знает", что "Ж" - это "ж" в верхнем регистре.

Казалось бы, ну что здесь сложного? Взяли бы и привязали заглавные символы к строчным во всех алфавитах! Но вы знаете, есть алфавиты, вообще не имеющие заглавных букв (арабский, грузинский, индийский, почти все иероглифические...); есть такие, в которых заглавные и строчные выглядят совершенно по-разному - в зависимости от ситуации; есть и такие, которые вообще вместо цифр используют буквы алфавита (иврит, древне-римский). Прикинтье, сколько должен весить набор UTF, чтобы учитывать все эти особенности? Поэтому данные правила учитываются не в самом UTF, а в локали.

Я понятно объяснил?

Re: Пропала выдача в поиске

Вообщем поменял я локаль на ru_RU.UTF-8 на сервере.
Перезапустил apache и nginx

<?='Текущая локаль: '.setlocale(LC_ALL, 'ru_RU.CP1251', 'ru_RU.cp1251', 'ru_RU', 'RU', 'koi8-r', 'ru_RU.KOI8-R', 'UTF-8', 'ru_RU.UTF-8', 'utf-8', 'ru_RU.utf-8', 'rus_RUS.CP1251', 'Russian_Russia.1251', 'russian'); ?>

показывает ru_RU.utf-8

удалил и заново сделал файл search.txt, но поиск по русски не пашет все равно.
В файле search.txt нет ни одного русского ключевого слова.

По англиски все ес-но работает.

1 неделя, 3 дня и 22 часа спустя:

Локаль на странице стоит:

<? setlocale(LC_CTYPE, 'ru_RU.UTF-8'); ?>

1 неделя, 3 дня и 23 часа спустя:

В итоге, что мне помогло.
Поставил на сервер локаль
ru_RU.cp1251 (как выяснилось ее там небыло ибо видимо ставили ubuntu server англоязычную)

на странице локаль поставил тоже 1251:

<? setlocale(LC_CTYPE, 'ru_RU.cp1251'); ?>