JavaScript скрипты


Encode URI - средствами JavaScript

Размещена 25 июля, 2008 года


Зачастую, кириллица автоматически преобразуется на стороне сервера или браузером, и проблем не возникает. Однако, иногда, при передаче данных с помощью 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; 
}

Замечания

  • этой функцией стоит пользоваться только для преобразования requestURI, а не полного URL.
  • стандартаные яваскриптовые функции encodeURI и encodeURIComponent преобразуют данные к UTF-16 и не работают в Gecko.

    Пример Работы:

    Введите строку для преобразования:
    Результат:
     


    Все права на статью принадлежат сайту fastcoder.org
  • SAPE все усложнил?

    MainLink - простая и прибыльная продажа ссылок!

    Последние поступления:

    Стишки пирожки про Олега⁠⁠

    Размещена 20 июня 2024 года

    Олег купил презервативы
    Проник в семидесятый год
    И подарил их папе с мамой
    Такой нелепый суицид

    читать далее…

    Размещена 10 августа 2020 года

    Я по ТВ видел, что через 10 лет мы будем жить лучше, чем в Германии...
    Я не понял, что это они с Германией сделать хотят?!

    читать далее…

    ТехЗадание на Землю

    Размещена 14 марта 2018 года

    Пpоект Genesis (из коpпоpативной пеpеписки)

    читать далее…

    Шпаргалка по работе с Vim

    Размещена 05 декабря 2017 года

    Vim довольно мощный редактор, но работа с ним не всегда наглядна.
    Например если нужно отредактировать какой-то файл например при помощи crontab, без знания специфики работы с viv никак.

    читать далее…

    Ошибка: Error: Cannot find a valid baseurl for repo

    Размещена 13 сентабря 2017 года

    Если возникает ошибка на centos 5 вида
    YumRepo Error: All mirror URLs are not using ftp, http[s] or file.
    Eg. Invalid release/

    читать далее…