ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
 
 
Опции темы Поиск в этой теме Опции просмотра

Url кодирование [c#]
  #1  
Старый 06.11.2007, 11:17
[x26]VOLAND
Moderator - Level 7
Регистрация: 07.06.2006
Сообщений: 556
Провел на форуме:
7549607

Репутация: 2702


Отправить сообщение для [x26]VOLAND с помощью ICQ Отправить сообщение для [x26]VOLAND с помощью AIM
Lightbulb Url кодирование [c#]

Наверное многие сталкивались с проблемой URL-кодирования строки в C#. Стандартная C#-функция HttpUtility.UrlEncode() кодирует только спецсимволы и пробелы. Попытка кодирования путём преобразования char-кодов входных символов разбивала каждый символ кириллицы на два url-представления (напр. %d9%c0). Дело в том что в C# char-код получается путём UTF8 кодирования. В результате на выходе мы получаем вполне рабочую URL-строку, но она не совместима с другими url-декодерами.
Написанные мной процедуры для кодирования/декодирования исправляют эту проблему, и получается стандартная url-строка, совместимая с другими декодерами.
Функция кодирвания:
PHP код:
public string UrlEncode(string s)
{
    
char[] chars = new char[256];
    
chars[128] = 'Ђ';
    
chars[129] = 'Ѓ';
    
chars[130] = '‚';
    
chars[131] = 'ѓ';
    
chars[132] = '„';
    
chars[133] = '…';
    
chars[134] = '†';
    
chars[135] = '‡';
    
chars[136] = '?';
    
chars[137] = '‰';
    
chars[138] = 'Љ';
    
chars[139] = '‹';
    
chars[140] = 'Њ';
    
chars[141] = 'Ќ';
    
chars[142] = 'Ћ';
    
chars[143] = 'Џ';
    
chars[144] = 'ђ';
    
chars[145] = '‘';
    
chars[146] = '’';
    
chars[147] = '“';
    
chars[148] = '”';
    
chars[149] = '•';
    
chars[150] = '–';
    
chars[151] = '—';
    
chars[152] = '˜';
    
chars[153] = '™';
    
chars[154] = 'љ';
    
chars[155] = '›';
    
chars[156] = 'њ';
    
chars[157] = 'ќ';
    
chars[158] = 'ћ';
    
chars[159] = 'џ';
    
chars[160] = '*';
    
chars[161] = 'Ў';
    
chars[162] = 'ў';
    
chars[163] = 'Ј';
    
chars[164] = '¤';
    
chars[165] = 'Ґ';
    
chars[166] = '¦';
    
chars[167] = '§';
    
chars[168] = 'Ё';
    
chars[169] = '©';
    
chars[170] = 'Є';
    
chars[171] = '«';
    
chars[172] = '¬';
    
chars[173] = '*';
    
chars[174] = '®';
    
chars[175] = 'Ї';
    
chars[176] = '°';
    
chars[177] = '±';
    
chars[178] = 'І';
    
chars[179] = 'і';
    
chars[180] = 'ґ';
    
chars[181] = 'µ';
    
chars[182] = '¶';
    
chars[183] = '·';
    
chars[184] = 'ё';
    
chars[185] = '№';
    
chars[186] = 'є';
    
chars[187] = '»';
    
chars[188] = 'ј';
    
chars[189] = 'Ѕ';
    
chars[190] = 'ѕ';
    
chars[191] = 'ї';
    
chars[192] = 'А';
    
chars[193] = 'Б';
    
chars[194] = 'В';
    
chars[195] = 'Г';
    
chars[196] = 'Д';
    
chars[197] = 'Е';
    
chars[198] = 'Ж';
    
chars[199] = 'З';
    
chars[200] = 'И';
    
chars[201] = 'Й';
    
chars[202] = 'К';
    
chars[203] = 'Л';
    
chars[204] = 'М';
    
chars[205] = 'Н';
    
chars[206] = 'О';
    
chars[207] = 'П';
    
chars[208] = 'Р';
    
chars[209] = 'С';
    
chars[210] = 'Т';
    
chars[211] = 'У';
    
chars[212] = 'Ф';
    
chars[213] = 'Х';
    
chars[214] = 'Ц';
    
chars[215] = 'Ч';
    
chars[216] = 'Ш';
    
chars[217] = 'Щ';
    
chars[218] = 'Ъ';
    
chars[219] = 'Ы';
    
chars[220] = 'Ь';
    
chars[221] = 'Э';
    
chars[222] = 'Ю';
    
chars[223] = 'Я';
    
chars[224] = 'а';
    
chars[225] = 'б';
    
chars[226] = 'в';
    
chars[227] = 'г';
    
chars[228] = 'д';
    
chars[229] = 'е';
    
chars[230] = 'ж';
    
chars[231] = 'з';
    
chars[232] = 'и';
    
chars[233] = 'й';
    
chars[234] = 'к';
    
chars[235] = 'л';
    
chars[236] = 'м';
    
chars[237] = 'н';
    
chars[238] = 'о';
    
chars[239] = 'п';
    
chars[240] = 'р';
    
chars[241] = 'с';
    
chars[242] = 'т';
    
chars[243] = 'у';
    
chars[244] = 'ф';
    
chars[245] = 'х';
    
chars[246] = 'ц';
    
chars[247] = 'ч';
    
chars[248] = 'ш';
    
chars[249] = 'щ';
    
chars[250] = 'ъ';
    
chars[251] = 'ы';
    
chars[252] = 'ь';
    
chars[253] = 'э';
    
chars[254] = 'ю';
    
chars[255] = 'я';

    
char[] bytes s.ToCharArray();
    
string outstr "";
    
int chr;
    for (
int i 0bytes.Lengthi++)
    {
        if ((int)
s[i] > 128)
        {
            
chr = Array.IndexOf(chars,s[i]);
        }
        else
        {
            
chr = (int)bytes[i];
        }

        
outstr += "%" Convert.ToString(chr16);
    }
    return 
outstr.ToLower();
        } 
Дункция декодирования:
PHP код:
public string UrlDecode(string s)
{
    
char[] chars = new char[256];
    
chars[128] = 'Ђ';
    
chars[129] = 'Ѓ';
    
chars[130] = '‚';
    
chars[131] = 'ѓ';
    
chars[132] = '„';
    
chars[133] = '…';
    
chars[134] = '†';
    
chars[135] = '‡';
    
chars[136] = '?';
    
chars[137] = '‰';
    
chars[138] = 'Љ';
    
chars[139] = '‹';
    
chars[140] = 'Њ';
    
chars[141] = 'Ќ';
    
chars[142] = 'Ћ';
    
chars[143] = 'Џ';
    
chars[144] = 'ђ';
    
chars[145] = '‘';
    
chars[146] = '’';
    
chars[147] = '“';
    
chars[148] = '”';
    
chars[149] = '•';
    
chars[150] = '–';
    
chars[151] = '—';
    
chars[152] = '˜';
    
chars[153] = '™';
    
chars[154] = 'љ';
    
chars[155] = '›';
    
chars[156] = 'њ';
    
chars[157] = 'ќ';
    
chars[158] = 'ћ';
    
chars[159] = 'џ';
    
chars[160] = '*';
    
chars[161] = 'Ў';
    
chars[162] = 'ў';
    
chars[163] = 'Ј';
    
chars[164] = '¤';
    
chars[165] = 'Ґ';
    
chars[166] = '¦';
    
chars[167] = '§';
    
chars[168] = 'Ё';
    
chars[169] = '©';
    
chars[170] = 'Є';
    
chars[171] = '«';
    
chars[172] = '¬';
    
chars[173] = '*';
    
chars[174] = '®';
    
chars[175] = 'Ї';
    
chars[176] = '°';
    
chars[177] = '±';
    
chars[178] = 'І';
    
chars[179] = 'і';
    
chars[180] = 'ґ';
    
chars[181] = 'µ';
    
chars[182] = '¶';
    
chars[183] = '·';
    
chars[184] = 'ё';
    
chars[185] = '№';
    
chars[186] = 'є';
    
chars[187] = '»';
    
chars[188] = 'ј';
    
chars[189] = 'Ѕ';
    
chars[190] = 'ѕ';
    
chars[191] = 'ї';
    
chars[192] = 'А';
    
chars[193] = 'Б';
    
chars[194] = 'В';
    
chars[195] = 'Г';
    
chars[196] = 'Д';
    
chars[197] = 'Е';
    
chars[198] = 'Ж';
    
chars[199] = 'З';
    
chars[200] = 'И';
    
chars[201] = 'Й';
    
chars[202] = 'К';
    
chars[203] = 'Л';
    
chars[204] = 'М';
    
chars[205] = 'Н';
    
chars[206] = 'О';
    
chars[207] = 'П';
    
chars[208] = 'Р';
    
chars[209] = 'С';
    
chars[210] = 'Т';
    
chars[211] = 'У';
    
chars[212] = 'Ф';
    
chars[213] = 'Х';
    
chars[214] = 'Ц';
    
chars[215] = 'Ч';
    
chars[216] = 'Ш';
    
chars[217] = 'Щ';
    
chars[218] = 'Ъ';
    
chars[219] = 'Ы';
    
chars[220] = 'Ь';
    
chars[221] = 'Э';
    
chars[222] = 'Ю';
    
chars[223] = 'Я';
    
chars[224] = 'а';
    
chars[225] = 'б';
    
chars[226] = 'в';
    
chars[227] = 'г';
    
chars[228] = 'д';
    
chars[229] = 'е';
    
chars[230] = 'ж';
    
chars[231] = 'з';
    
chars[232] = 'и';
    
chars[233] = 'й';
    
chars[234] = 'к';
    
chars[235] = 'л';
    
chars[236] = 'м';
    
chars[237] = 'н';
    
chars[238] = 'о';
    
chars[239] = 'п';
    
chars[240] = 'р';
    
chars[241] = 'с';
    
chars[242] = 'т';
    
chars[243] = 'у';
    
chars[244] = 'ф';
    
chars[245] = 'х';
    
chars[246] = 'ц';
    
chars[247] = 'ч';
    
chars[248] = 'ш';
    
chars[249] = 'щ';
    
chars[250] = 'ъ';
    
chars[251] = 'ы';
    
chars[252] = 'ь';
    
chars[253] = 'э';
    
chars[254] = 'ю';
    
chars[255] = 'я';

    
float d s.Length 3;
    
int max Convert.ToInt32(Math.Floor(d));
    
string outstr "";
    
char chr;
    
int index;
    for (
int i 0maxi++)
    {
        try
        {
            
index 0;
            
chr Uri.HexUnescape(s.Substring(33), ref index);
            if ((int)
chr 128 && (int)chr 255)
            {
        
outstr += chars[chr];
            }
            else
            {
        
outstr += chr;
            }
        }catch (
Exception e){} // <-- для игнора всех ошибок
    
}

    return 
outstr;

 
Ответить с цитированием
 



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Продам пиаристые шеллы! fly Доступы, shells, ftp - Покупка, продажа 0 03.05.2007 01:28
Подскажите Chrek625 Болталка 6 11.01.2007 21:46
"Распутывание" URI, URL и URN [2-D] Чужие Статьи 0 24.12.2006 17:22



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ