Наверное многие сталкивались с проблемой 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 = 0; i < bytes.Length; i++) { if ((int)s[i] > 128) { chr = Array.IndexOf(chars,s[i]); } else { chr = (int)bytes[i]; } outstr += "%" + Convert.ToString(chr, 16); } 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 = 0; i < max; i++) { try { index = 0; chr = Uri.HexUnescape(s.Substring(i * 3, 3), ref index); if ((int)chr > 128 && (int)chr < 255) { outstr += chars[chr]; } else { outstr += chr; } }catch (Exception e){} // <-- для игнора всех ошибок } return outstr; }