Последнее время многим отечественным компаниям не хватает русскоязычного рынка и очевидным решением является расширение на европейские просторы. Но почему-то к русским товарам и услугам англоязычные граждане относятся предвзято. Поэтому не редко, для улучшения продаж, организации представляются европейскими. И зачастую одним из инструментов продаж служит сайт, который должен быть на английском языке. А поскольку европейская версия сайта, почти всегда, это копия русского, то нужно максимально качественно перевести ее на иностранный язык. И мало того, что перевод должен быть качественным, еще нужно эти переводы аккуратно добавить на сайт. И тут начинается самое интересное: где-то на страницах остаются русские строчки, в js или html остаются русские комментарии, в alt-ах к картинкам и ссылкам остаются русские подписи и прочие мелочи, которые выдают русский след. С такой проблемой уже несколько раз приходилось сталкиваться, довольно сложно все проверить и протестировать. Поэтому, когда пришел очередной клиент с подобной проблемой, было решено упростить и ускорить работу тестировщика — написать небольшой скрипт, который автоматически будет сканировать страницу на наличие русских символов и слов.
Поиск кириллических символов на странице с помощью php
Поскольку основным языком, с которым я работаю – это php, то и поиск было решено писать на нем. По сути, задача очень простая: получить html-код страницы или js-скрипта и проверить весь текст на вхождение русских символов. В данном случае, для поиска идеально подходят регулярные выражения, вот только составить нужное, это всегда для меня головная боль. И этот случай не исключение – провозиться пришлось несколько часов. Основная сложность заключалась в том, что регистронезависимый поиск с помощью регулярки просто так не работает с русскими символами. Чтобы научить регулярку искать нужные символы как в нижнем, так и верхнем регистре, нужно использовать модификатор «u», он позволяет работать с текстом в кодировке UTF-8. А также потребуется второй модификатор – «i», он отвечает за регистронезависимый поиск. Вся регулярка будет выглядеть вот так:
/([а-я]+)/ui
Такое регулярное выражение позволяет найти символы и целые слова, состоящие из русских символов в любом регистре.
Поиск русских слов в тексте с помощью php
Регулярка составлена, теперь дело техники. Остается только написать несколько строк кода, они приведены чуть ниже. Чтобы было понятнее, в коде добавлены комментарии:
// страница, на которой будем искать кириллицу $url = "http://php.net/manual/ru/function.preg-match-all.php"; // получаем html-код страницы $page_html = @file_get_contents($url); // если удалось получить страницу if($page_html){ $pattern = '/([а-я]+)/ui'; // находим все русские слова preg_match_all($pattern, $page_html, $matches); // если что-то нашлось if(!empty($matches)){ // выводим по одному слову foreach($matches[0] as $word){ echo $word . "<br>"; } } }
Послесловие
Для более удобного поиска и работы со скриптом, можно добавить небольшую форму с полем для ввода одного или нескольких адресов страниц. Должно получиться что-то подобное:
<form action="#" method="post"> <textarea name="urls"></textarea> <br> <input type="submit" value="find"> </form>
И сам код нужно будет немного дополнить:
// если была отправлена форма if($_POST["urls"]){ // получаем все адреса страниц, разделенные переносом строки $array_urls = explode("\n", $_POST["urls"]); foreach($array_urls as $url){ $url = trim($url); // уберем лишние пробелы // получаем html-код страницы $page_html = @file_get_contents($url); // если удалось получить страницу if($page_html){ $pattern = '/([а-я]+)/ui'; // находим все русские слова preg_match_all($pattern, $page_html, $matches); // если что-то нашлось if(!empty($matches)){ // выводим по одному слову foreach($matches[0] as $word){ echo $word . "<br>"; } } } } }