(4) "Такое преобразование происходит в два этапа: сначала каждый символ кириллицы кодируется в Юникоде (UTF-8) в последовательность из двух байтов, а затем каждый байт этой последовательности записывается в шестнадцатеричном представлении:"
// функция возвращает строку urlencoded
//
Функция UrlEncode(стр)
HEX = Новый Массив();
Для сч = 48 По 57 Цикл
HEX.Добавить(Символ(сч));
КонецЦикла;
Для сч = 65 По 70 Цикл
HEX.Добавить(Символ(сч));
КонецЦикла;
рез="";
Для сч = 1 По СтрДлина(стр) Цикл
чар = Сред(стр, сч, 1);
Если (чар >= "a") И (чар <= "z") Тогда рез = рез + чар; Продолжить; КонецЕсли;
Если (чар >= "A") И (чар <= "Z") Тогда рез = рез + чар; Продолжить; КонецЕсли;
Если (чар >= "0") И (чар <= "9") Тогда рез = рез + чар; Продолжить; КонецЕсли;
Если чар = "-" Тогда рез = рез + чар; Продолжить; КонецЕсли;
Если чар = "_" Тогда рез = рез + чар; Продолжить; КонецЕсли;
Если чар = "=" Тогда рез = рез + чар; Продолжить; КонецЕсли;
Если чар = "&" Тогда рез = рез + чар; Продолжить; КонецЕсли;
Если чар = "." Тогда рез = рез + чар; Продолжить; КонецЕсли;
Если чар = "#" Тогда рез = рез + чар; Продолжить; КонецЕсли;
кс = КодСимволаASCII(чар);
рез = рез+ "%" + HEX[Цел(кс/16)] + HEX[Цел(кс % 16)];
КонецЦикла;
Возврат рез;
КонецФункции
// возвращает код символа в ASCII
//
Функция КодСимволаASCII(Символ)
КодUNICODE = КодСимвола(Символ);
Если ((КодUNICODE > 1039) И (КодUNICODE < 1104)) Тогда
Возврат (КодUNICODE - 848);
ИначеЕсли КодUNICODE = 8470 Тогда
Возврат 185;
ИначеЕсли КодUNICODE = 1105 Тогда
Возврат 184;
ИначеЕсли КодUNICODE = 1025 Тогда
Возврат 168;
Иначе
Возврат КодUNICODE;
КонецЕсли;
КонецФункции
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший