JavaScript скрипты
Encode URI - средствами JavaScript
Зачастую, кириллица автоматически преобразуется на стороне сервера или браузером, и проблем не возникает. Однако, иногда, при передаче данных с помощью AJAX, сервер может не принимать такие данные и возникает необходимость явного приведения строки к UTF-8.
Напишем для этих целей простую функцию:
function urlEncode(str) {
// Простая проверка
if (!str || typeof(str) == "undefined") return;
// Создаем хеш для хранения символов, где ключ - сам символ,
// а значение - его шестнадцатеричеый эквивалент
var utf8Array = {};
// Сначала добавляем стандартные 255 символов
var i = j = j2 = 0;
for (i = 0; i <= 255; i++) {
j = parseInt(i/16); var j2 = parseInt(i%16);
utf8Array[String.fromCharCode(i)] = (
'%' +
j.toString(16) +
j2.toString(16)
).toUpperCase();
}
// И отдельно проработаем кириллицу
var rusAdditional = {
'_' : '%5F', 'А' : '%C0', 'Б' : '%C1', 'В' : '%C2',
'Г' : '%C3', 'Д' : '%C4', 'Е' : '%C5',
'Ж' : '%C6', 'З' : '%C7', 'И' : '%C8', 'Й' : '%C9',
'К' : '%CA', 'Л' : '%CB', 'М' : '%CC',
'Н' : '%CD', 'О' : '%CE', 'П' : '%CF', 'Р' : '%D0',
'С' : '%D1', 'Т' : '%D2', 'У' : '%D3',
'Ф' : '%D4', 'Х' : '%D5', 'Ц' : '%D6', 'Ч' : '%D7',
'Ш' : '%D8', 'Щ' : '%D9', 'Ъ' : '%DA',
'Ы' : '%DB', 'Ь' : '%DC', 'Э' : '%DD', 'Ю' : '%DE',
'Я' : '%DF', 'а' : '%E0', 'б' : '%E1',
'в' : '%E2', 'г' : '%E3', 'д' : '%E4', 'е' : '%E5',
'ж' :'%E6', 'з' : '%E7', 'и' : '%E8',
'й' : '%E9', 'к' : '%EA', 'л' : '%EB', 'м' : '%EC',
'н' : '%ED', 'о' : '%EE', 'п' : '%EF',
'р' : '%F0', 'с' : '%F1', 'т' : '%F2', 'у' : '%F3',
'ф' : '%F4', 'х' : '%F5', 'ц' : '%F6',
'ч' : '%F7', 'ш' : '%F8', 'щ' : '%F9', 'ъ' : '%FA',
'ы' : '%FB', 'ь' : '%FC', 'э' : '%FD',
'ю' : '%FE', 'я' : '%FF', 'ё' : '%B8', 'Ё' : '%A8'
}
for (i in rusAdditional) utf8Array[i] = rusAdditional[i];
// Посимвольно заменяем символы на их
// шестнадцатиречные эквиваленты
var res = "";
for(i = 0; i < str.length; i++) {
var simbol = str.substr(i,1);
res += typeof utf8Array[simbol] != "undefined"
? utf8Array[simbol]
: simbol;
}
// Пробелы заменяем на плюсы
res = res.replace(/\s/g, "+");
return res;
}
Замечания
Пример Работы:
| Введите строку для преобразования: | |
| Результат: | |