Функции для поиска русских букв по тексту файлов в кодировке UTF-8 или ANSI не зависимо от регистра на языке PHP

Ранее я начал писать браузерный редактор для PHP файлов с коммандером в котором предусмотрел возможность поиска текста внутри файла(более подробно о редакторе и файловом коммандере можно прочитать по ссылке: blog.ivru.net/?id=240, на той же странице выложен его исходный код). Изначально поиск был реализован таким образом, что при попытке найти русский текст при запросе формы он отправлялся в кодировке UTF-8, при этом получилось так что один из API севера на котором так же стоял указанный редактор сохранял результат своей выборки, в том числе русские слова, в кодировке ANSI, в результате чего поиск из редактора не приводил к обнаружению нужных файлов. Поэтому я решил доработать редактор так чтобы он искал заданную фразу по русским словам как в кодировке ANSI так и в UTF-8, а так же не зависимо как от регистра в котором вводятся символы, так и от регистра символов в файлах по которым осуществляется поиск.

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

Для реализации указанного подхода было написано две функции.

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

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

Функция проверки наличия в строке русских букв в кодировке UTF-8 или ANSI не зависимо от регистра.

Функция для приведения русских букв любого регистра и в кодировке UTF-8 или ANSI к нижнему регистру кодировки ANSI.

Как с помощью указанных выше функций производить поиск искомой фразы в файлах без учёта кодировки и регистра

Сами по себе указанные функции поиск не осуществляют, они лишь выполняют необходимые для такого поиска преобразования. Предположим что у нас в виде переменной есть фраза которую мы хотим найти в файлах. Для того чтобы не производить преобразования файлов там где это не нужно(то-есть избежать применение функции convToAnsi) для начала проверим поисковую фразу функцией isContainsRussianLetters, если эта функция возвращает true то преобразование текст файлов и поисковой фразы требуется, а если возвращает false, по осуществляем поиск без преобразования. Получить текст файлов в переменную в PHP можно используя функцию file_get_contents. А для того чтобы произвести поиск фразы в тексте файлов можно использовать функцию strpos с ей последующим сравнением с !== false, выполнение такого сравнения означает, что искомая фраза найдена в тексте файла.

Комментарии

Если у Вас возникли вопросы, Вы можете задать их в форме ниже. В частности если Ваш вопрос по Bitrix и что то не получается - можно спросить. Ваш e-mail не публикуется, при этом я отвечу на него если будет что то по теме. Писать необходимо для людей - избегайте сленга, пишите орфографически правильно.

Имя:
E-mail:
Текст комментария:

Вы так же можете прочитать следующие статьи: