Добро пожаловать!
Здесь вы можете найти ответ на интересующий вас вопрос в отрасли сайтостроения, познакомится ближе с web технологиями и web стандартами.

Заметки

JavaScript: escape(), совместимый с русскими буквами

К сожалению, стандартное поведение функции escape() при работе с русскими буквами не соответствует тому, что обычно требуется для веб-приложений. Вызов escape('тест') вместо %F2%E5%F1%F2 (закодированные символы в кодировке Windows-1251) возвращает бесполезную строку %u0442%u0435%u0441%u0442. Это можно поправить, если перед вызовом escape() перевести нужные символы из Unicode в Windows-1251. Следующий код заменяет стандартную функцию и переводит буквы русского алфавита из Unicode в Windows-1251 (таблицу перевода можно менять, как угодно):

// Инициализируем таблицу перевода
var trans = [];
for (var i = 0x410; i <= 0x44F; i++)
  trans[i] = i - 0x350; // А-Яа-я
trans[0x401] = 0xA8;    // Ё
trans[0x451] = 0xB8;    // ё

// Сохраняем стандартную функцию escape()
var escapeOrig = window.escape;

// Переопределяем функцию escape()
window.escape = function(str)
{
  var ret = [];
  // Составляем массив кодов символов, попутно переводим кириллицу
  for (var i = 0; i < str.length; i++)
  {
    var n = str.charCodeAt(i);
    if (typeof trans[n] != 'undefined')
      n = trans[n];
    if (n <= 0xFF)
      ret.push(n);
  }
  return escapeOrig(String.fromCharCode.apply(null, ret));
}

Требуется IE 5.5+, поскольку более старые версии не поддерживают Function.apply() и Array.push() (это можно обойти, но ухудшится эффективность кода). С другими браузерами проблем нет. Заметим, что любые непереведенные символы с кодом более 255 удаляются.

Более корректно было бы кодировать данные в UTF-8 с помощью функции encodeURIComponent(). Но в этом случае сервер должен либо поддерживать Unicode, либо перекодировать (например, с помощью iconv) получаемые данные опять же в кодировку Windows-1251.

Пример декодирования строки %u0442%u0435%u0441%u0442 на сервере:

<?php
# Для Windows-1251:
echo preg_replace('#%u([0-9A-F]{4})#se',
                  'iconv("UTF-16BE","Windows-1251",pack("H4","$1"))',
                  '%u0442%u0435%u0441%u0442');

# Для UTF-8:
echo preg_replace('#%u([0-9A-F]{4})#se',
                  'iconv("UTF-16BE","UTF-8",pack("H4","$1"))',
                  '%u0442%u0435%u0441%u0442');
?>