В Node․js (все версии, проверено на v6․3․1) наблюдается ошибка, когда в query‑string передаются параметры, содержащие кириллицу или китайские иероглифы․ Пример:
http://example․com/search?query=привет+мир
Сервер получает «испорченную» строку, потому что библиотека querystring не экранирует символы вне ASCII‑диапазона․
Как исправить
- Явно кодировать параметры перед отправкой: encodeURIComponent в клиентском JavaScript․
- На сервере использовать querystring․unescape только после предварительного decodeURIComponent․
- Если вы работаете с фреймворком Express, включите middleware
express․urlencoded({ extended: true }), который уже выполняет корректное декодирование․
Поисковые системы и специальные символы
Многие поисковые движки (LexisNexis, Google, внутренние корпоративные поиски) резервируют определённые слова и знаки препинания․ Чтобы найти именно эти токены, их необходимо помещать в кавычки․
Пример запроса в LexisNexis:
"AND" "OR" "NOT"
Без кавычек система интерпретирует их как операторы булевой алгебры, а не как искомые слова․
Рекомендации
- Всегда экранировать зарезервированные слова двойными кавычками․
- Если нужно искать фразу со спецсимволами (дефис, апостроф), заключайте всю фразу в кавычки․
- При построении собственного поискового индекса используйте анализатор, который сохраняет оригинальные токены (например, standard анализатор в Elasticsearch с отключённым stemming)․
Работа с пунктуацией в SQL‑запросах
В MySQL и PostgreSQL часто возникает необходимость выбрать записи, содержащие или не содержащие знаки препинания (дефис, апостроф и т․д․)․
MySQL: LIKE с учётом пунктуации
Для поиска записей, содержащих апостроф:
SELECT * FROM table WHERE column LIKE '%'%';Для исключения таких записей добавляем NOT LIKE․
PostgreSQL: регистронезависимый поиск кириллицы
Запрос
LOWER(name) LIKE LOWER('после')может не возвращать результаты из‑за некорректной работы функцииLOWERс определёнными локалями․ Решение:
- Убедиться, что база создана с локалью UTF8 и LC_COLLATE = 'ru_RU․UTF-8'․
- Использовать оператор ILIKE, который уже выполняет регистронезависимое сравнение без необходимости явно вызывать LOWER:
SELECT name FROM users WHERE name ILIKE 'после';
Исключение русскоязычных результатов из поиска
Пользователи, чей регион установлен в Украину, часто жалуются на то, что в выдаче Google появляются страницы на русском языке․ Хотя полностью отключить язык невозможно, можно уменьшить его влияние:
- Добавить в запрос параметр lr=lang_uk (ограничить результаты украинским языком)․
- Использовать оператор -site:ru для исключения доменов ․ru (не идеально, но помогает)․
- В собственных поисковых системах настраивать вес языковых факторов в ранжировании․
Полнотекстовый поиск и специальные символы
Статья «When Search Splits Your Words: Handling Special Characters in Full-Text Search» (Medium, 29 января 2026) показывает, что кавычки влияют на этап парсинга запроса, а не на этап анализа токенов․ Поэтому:
- Если нужно найтиExact match с учётом спецсимволов, заключайте фразу в кавычки․
- Для более гибкого поиска используйте операторы AND, OR и NOT совместно с токенизатором, который сохраняет спецсимволы как отдельные токены (например, whitespace токенизатор с пользовательским фильтром)․
Корректная обработка кириллицы в веб‑приложениях требует внимания на нескольких уровнях:
- Кодирование и декодирование URL‑параметров (использовать
encodeURIComponent/decodeURIComponent)․ - Экранирование зарезервированных слов и символов в поисковых запросах․
- Настройка локалей и использование подходящих операторов в СУБД (MySQL, PostgreSQL)․
- Языковая фильтрация в поисковых системах и правильная конфигурация полнотекстовых индексов․
Следуя этим рекомендациям, вы сможете минимизировать ошибки, связанные с некорректной обработкой русских символов, и обеспечить предсказуемую работу ваших приложений и сервисов․