Перейти к содержанию

Нужна помощь с Java Script


Ice_man

Рекомендуемые сообщения

Всем привет, есть небольшой скрипт, буквально в 5-10 строчек, писал фиг знает кто, нужно пояснить его, сам я ява скрипт не учил к сожалению.. Есть такие кто может помочь?

Ссылка на сообщение
Поделиться на другие сайты

Я не обещаю(давно сей язык учил),но можно посмотреть.Как Вам удобнее в ЛС или в теме?

Изменено пользователем gecsagen
Ссылка на сообщение
Поделиться на другие сайты

 

 


Я не обещаю(давно сей язык учил),но можно посмотреть.Как Вам удобнее в ЛС или в теме?
+1
Ссылка на сообщение
Поделиться на другие сайты

В общем вот скрипт:

 
//utf8 to 1251 converter (1 byte format, RU/EN support only + any other symbols) by drgluck
    function utf8_decode (aa) {
    
        var bb = '', c = 0;
        for (var i = 0; i < aa.length; i++) {
            c = aa.charCodeAt(i);
            if (c > 127) {
                if (c > 1024) {
                    if (c == 1025) {
                        c = 1016;
                    } else if (c == 1105) {
                        c = 1032;
                    }
                    
                    
                    
                    bb += "%" + (c - 848).toString(16);
                }
            } else {
                 if(c == 32)
                   bb+="+";
                 else
                  bb += aa.charAt(i);
               
            }
        }
    
        return bb;
    }
    

Использование скрипта на сайте:

 

  if(but.name == "bremb")
 {

    if(word !="")
    {
    window.open("http://adstat.rambler.ru/wrds/wrds.pl?words=" + utf8_decode(word));
    }
    else
    {
    window.open("http://adstat.rambler.ru");
    }

    return;
 }


В общем желательно бы прокомментировать основные строчки и составить блок схему простенькую, за работу отблагодарю баллами =)


как я понял скрипт выполняет декодирование utf8 в javascript

Ссылка на сообщение
Поделиться на другие сайты

Это конвертор из UTF8 в Win1251 (только для рус/англ, 1 байт, т.е. со значениями типа 0aaa aaaa от 0 до 127 на 1 байт).

Работу этой функции мы часто видим в адресной строке с кириллицей. Типа: '123 Ёё aZ аЯ' -> '123+%a8%b8+aZ+%e0%df'

Схему чертить влом...

Баллы не надо, т.к. не знаю что это... :)

Code:

 

    function utf8_decode (aa) { //функция с именем utf8_decode и аргументом аа
    
        var bb = '', c = 0; //объявление и инициализация переменных bb - пустая строка, с - ноль
        for (var i = 0; i < aa.length; i++) { //цикл через переменную i с шагом 1, от 0 до размера (длины массива) aa.

//Короче перебираем посимвольно (поэлементно) строку (массив), полученную в качестве аргумента функции.
            c = aa.charCodeAt(i); //запихиваем в переменную C результат преобразования элемента массива (строки) в число.

//Обычно это число 0 до 65536. Первые 128 значений совпадают с ASCII, также, чтобы получить старшие  значения от 65536 нужно получать значения 2-х символов
            if (c > 127) { // если значение С больше 127, нужно преобразовать
                if (c > 1024) {//если C > 1024
                    if (c == 1025) { // если С = 1025, заморочка для буквы Ё
                        c = 1016; // С присвоим 1016, ниже будем вычитать (1016-848 = 168, т.е. Ё)
                    } else if (c == 1105) { //а если С = 1105, заморочка для буквы ё
                        c = 1032; //С = 1032 (1032-848 = 184 т.е. ё)
                    } //конец если if (c==1025) else if (c==1025)                   
                    
                    
                    bb += "%" + (c - 848).toString(16); // преобразуем значение C>1024 (после вычитания 848) в шестнадцатеричное и с смволом % пихнем в выходную строку (массив) bb
                } //конец если if (c > 1024)
            } else { // если меньше 128, писал выше, что первые 128 значений совпадают с ASCII, поэтому просто вернем символ, полученный из массива
                 if(c == 32) //если значение С = 32 (пробел)
                   bb+="+"; //то добавим к содержимому строки bb символ "+"… Ну, а пробел будет плюсом
                 else //иначе
                  bb += aa.charAt(i); //вот эта функция возвращает символ из строки (массива) под номером i из нашего основного цикла-перебора. Результат добавим к содержимому массива bb
               
            } //конец если if (c > 127)
        } //конец основного цикла
    
        return bb; // вернем результат преобразования из строки (массива) bb
    } //конец функции
    

 

 

 


Итог работы функции: символы с кодом от 0 до 127 возвращаем "как есть", от 128 до 1024 - пропускаем, от 1025 преобразуем в шестнадцетиричный код (с некоторой заморочкой с Ё, ё), пробел заменяем на "+".

Изменено пользователем ACIK
  • Согласен 1
Ссылка на сообщение
Поделиться на другие сайты

Спасибо=)) Баллы это форумная валюта необходимая для покупок в магазине, подумай, вдруг нужна?=)
P.S. Ответь в ЛС на счет баллов=))

Изменено пользователем Ice_man
Ссылка на сообщение
Поделиться на другие сайты
Гость
Эта тема закрыта для публикации ответов.
×
×
  • Создать...