![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| Serebrus |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 333 Регистрация: 22.5.2007 Где: Ташкент Репутация: нет Всего: нет |
Привет всем.
Задача такая: надо найти (и составить список в виде гиперссылок) htm файлов, где встречается вводимое слово (поиск по словам). Вот код:
Но, stripos не очень ладит с кириллицей (проверил, то находит в одном файле, то нет, т.е. находит не всех файлах и плюс находит то что вводится т.е. строго по регистру). |
|||
|
||||
| Veve |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 291 Регистрация: 1.1.2005 Где: Латвия, Рига Репутация: 3 Всего: 13 |
||||
|
||||
| ksnk |
|
||||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
imho, кто-то не очень ладит с локалью. В какой кодировке сами php файлы? вот достаточно, для меня, универсальная установка локали
После этой строчки все функции работы со строками начнут считать, что строки в кодировке cp1251 и правильно узнавать большие и маленькие буквы, не говоря уже о регулярках... таким образом, не нужно конвертировать их в utf-8... Для проверки, насколько подошла локаль - можно сделать чего-то такое
Если видны большие буквы, все, вроде, в порядке... Если нет - нужно ковырять настройки сервера и смотреть список поддерживаемых локалей... -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
||||
|
|||||
| Serebrus |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 333 Регистрация: 22.5.2007 Где: Ташкент Репутация: нет Всего: нет |
Veve, я употребил регистерно-независимый вариант (mb_stripos), но почемуто, все равно функция работает строго по регистеру, не понятно почему?
Добавлено @ 10:45 ksnk, кодировка страницы: utf-8. Я поставил setlocale(LC_ALL ,'ru_RU.CP1251') перед открытием файла, но не помагло, наоборот, mb_stripos вообще ни чего не находит, т.е. результат пуст. Это сообщение отредактировал(а) Serebrus - 13.7.2009, 11:00 |
|||
|
||||
| Ипатьев |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2232 Регистрация: 5.7.2009 Репутация: 28 Всего: 37 |
Во-первых, я бы задачу упростил.
Если у нас проблема с поиском строки в подстроке, то я бы и оставил в программе всего три строчки: присвоение значения переменной-стогу, переменной-иголке и собственно функцию поиска. Во-вторых, что значит "кодировка страницы: utf-8", если применяется конвертирование из 1251? Сначала, я думаю, автору надо определиться, в какой кодировке у него какие данные, привести к единой, и потом только сравнивать. |
|||
|
||||
| ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
Тогда, после установки локали и работы с файлами нужно будет вернуть ее назад. А есть ли кодировка windows-1251 с точки зрения функции iconv? У меня везде написано CP1251... Файлы перекодируются в UTF-8 нормально? -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
| Serebrus |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 333 Регистрация: 22.5.2007 Где: Ташкент Репутация: нет Всего: нет |
Ипатьев, "кодировка страницы: utf-8"-это, кодировка главной страницы, т.е. результаты поиска будут здесь, а вот windows-1251 это, кодировка htm страниц, которые осуществляется поиск.
Добавлено через 58 секунд ksnk, да нормально |
|||
|
||||
| Ипатьев |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2232 Регистрация: 5.7.2009 Репутация: 28 Всего: 37 |
кстати, имеет ли смысл с точки зрения производительности перекодировать каждый файл целиком, вместо того, чтобы сконвертировать одну переменную один раз?
хотя сначала, конечно, надо разобраться с тем, что там в какой кодировке и нужно ли перекодировать вообще. для начала надо уяснить, что в компьютере нет такого понятия "кирилица". есть понятие "кодировка". Добавлено через 2 минуты и 50 секунд echo mb_internal_encoding(); что выводит? |
|||
|
||||
| genixxx |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 23.10.2009 Репутация: нет Всего: нет |
У меня похожая проблема - не работают функции stripos, strtoupper и т.п. с русскими буквами. Что я только не делал - и локаль прописывал в скрипте перед вызовом этих функций, и по SSH применял локаль на сервере, а толку ноль. Подскажите какое-нибудь магическое решение пожалуйста? =)
ksnk видимо единственный тут в теме, не могли бы Вы подсказать что делать, если такая локаль не подходит? (Прочем, как и еще штук пять которые я попробовал) Сайт на VDS, поэтому любые настройки могу сделать, но вот какие... |
|||
|
||||
![]()
|
| Правила форума "PHP" | |
|
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |