URL‑параметры с русскими и китайскими символами

Бесплатная консультация юриста

+7 (800) 301-07-30

Реклама jurik.ru

В 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"

Без кавычек система интерпретирует их как операторы булевой алгебры, а не как искомые слова․

Рекомендации

  1. Всегда экранировать зарезервированные слова двойными кавычками․
  2. Если нужно искать фразу со спецсимволами (дефис, апостроф), заключайте всю фразу в кавычки․
  3. При построении собственного поискового индекса используйте анализатор, который сохраняет оригинальные токены (например, 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 токенизатор с пользовательским фильтром)․

Корректная обработка кириллицы в веб‑приложениях требует внимания на нескольких уровнях:

  1. Кодирование и декодирование URL‑параметров (использовать encodeURIComponent/decodeURIComponent)․
  2. Экранирование зарезервированных слов и символов в поисковых запросах․
  3. Настройка локалей и использование подходящих операторов в СУБД (MySQL, PostgreSQL)․
  4. Языковая фильтрация в поисковых системах и правильная конфигурация полнотекстовых индексов․

Следуя этим рекомендациям, вы сможете минимизировать ошибки, связанные с некорректной обработкой русских символов, и обеспечить предсказуемую работу ваших приложений и сервисов․