ЙажаСценарий / Говнокод #2765 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
  46. 46
  47. 47
  48. 48
  49. 49
  50. 50
  51. 51
  52. 52
  53. 53
  54. 54
  55. 55
  56. 56
  57. 57
  58. 58
  59. 59
  60. 60
  61. 61
  62. 62
  63. 63
  64. 64
  65. 65
  66. 66
  67. 67
Char2Hex = new Object();

Char2Hex['_']='%5F';
Char2Hex['А']='%C0';
Char2Hex['Б']='%C1';
Char2Hex['В']='%C2';
Char2Hex['Г']='%C3';
Char2Hex['Д']='%C4';
Char2Hex['Е']='%C5';
Char2Hex['Ж']='%C6';
Char2Hex['З']='%C7';
Char2Hex['И']='%C8';
Char2Hex['Й']='%C9';
Char2Hex['К']='%CA';
Char2Hex['Л']='%CB';
Char2Hex['М']='%CC';
Char2Hex['Н']='%CD';
Char2Hex['О']='%CE';
Char2Hex['П']='%CF';
Char2Hex['Р']='%D0';
Char2Hex['С']='%D1';
Char2Hex['Т']='%D2';
Char2Hex['У']='%D3';
Char2Hex['Ф']='%D4';
Char2Hex['Х']='%D5';
Char2Hex['Ц']='%D6';
Char2Hex['Ч']='%D7';
Char2Hex['Ш']='%D8';
Char2Hex['Щ']='%D9';
Char2Hex['Ъ']='%DA';
Char2Hex['Ы']='%DB';
Char2Hex['Ь']='%DC';
Char2Hex['Э']='%DD';
Char2Hex['Ю']='%DE';
Char2Hex['Я']='%DF';
Char2Hex['а']='%E0';
Char2Hex['б']='%E1';
Char2Hex['в']='%E2';
Char2Hex['г']='%E3';
Char2Hex['д']='%E4';
Char2Hex['е']='%E5';
Char2Hex['ж']='%E6';
Char2Hex['з']='%E7';
Char2Hex['и']='%E8';
Char2Hex['й']='%E9';
Char2Hex['к']='%EA';
Char2Hex['л']='%EB';
Char2Hex['м']='%EC';
Char2Hex['н']='%ED';
Char2Hex['о']='%EE';
Char2Hex['п']='%EF';
Char2Hex['р']='%F0';
Char2Hex['с']='%F1';
Char2Hex['т']='%F2';
Char2Hex['у']='%F3';
Char2Hex['ф']='%F4';
Char2Hex['х']='%F5';
Char2Hex['ц']='%F6';
Char2Hex['ч']='%F7';
Char2Hex['ш']='%F8';
Char2Hex['щ']='%F9';
Char2Hex['ъ']='%FA';
Char2Hex['ы']='%FB';
Char2Hex['ь']='%FC';
Char2Hex['э']='%FD';
Char2Hex['ю']='%FE';
Char2Hex['я']='%FF';

счастливые ользователи mail.ru могут наблюдать этот код в странице чтения входящего сообщения

Запостил: danilissimus danilissimus, (Updated )

Комментарии (30) RSS

  • mail.ru всегда говнокодил,
    см. верстку, ну например Папки, Входящие, Сомнительные....
    Это же просто убиться, я не говорю уж про таблицы
    Ответить
    • Я им как-то написал в поддержку по поводу их кривой верстки, из-за которой в Firefox 2 местами происходят колоссальные глюки. Ответили в том смысле, что "используйте современные браузеры типа IE8"! Пришлось сделать свой стиль.
      Ответить
        • Это ясно, но IE 6 для них тоже "современней", чем FF 2, потому что им пользуется большее количество современных дятлов юзеров.
          Лично мне похер, я-то на любой сайт могу натянуть свой user.css, и все будет выглядеть, как я хочу.
          Но такие глюки я видел только на mail.ru, и это в наше время, а я помню как ентот мейл только запускался...
          Ответить
          • используй GraceMonkey для FF. Ето для "really tinkerer ones", т.к. можно JS дописывать. Нуа где JS там и стили мона подправить.

            Пользователи IE6 не всегда дятлы. Полиси некоторых банков до сих пор официально поддерживают лишь IE6. Не взирая на просьбы MS свичнуться на IE8.
            Ответить
            • дык это все у меня есть... и Stylish, и Бибизяна, и я себя чувствую хорошо.
              Мне за державу обидно!
              Ответить
  • ненавижу mail.ru. Чтобы всю жизнь им так писали.
    Ответить
  • а как это в JS можно сделать по другому ? по моему вполне нормальный метод ...
    Ответить
    • Вопервых такого не надо было допускать. Юникод таки полезная вещь, ну а уж если понадобилось, то это можно записать гораздо компактнее.
      Ответить
  • Если избавиться от символа процента в каждой строке (а добавлять его когда надо),

    все заровнять в одну строку с помошью yuicompressor
    m01['_']='%5F';
    //itd
    Char2Hex=m01;

    - уже будет хорошо, уменьшит траф на сотенку байт;

    Однако есть и хорошие свойства у етого говнокода:
    1. он не делает утечки памяти (если когда надо сделать delete Char2Hex)
    2. если сравнить с уникодом - то етот мап держит лишь то что надо. Обидно правда за украинские буквы, жестоко их отсеяли.
    Ответить
  • вот кусок, делает то же, но короче.
    Char2Hex = {'_':'%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'};

    Замечу, никаких for-ов, никаких string concatenations, просто заполнение мапы as is
    Ответить
    • Вот как велосипежу я. Заменяем encodeURIComponent() на самопал, который экранирует данные в CP1251, а не входящие в кодировку символы заменяет десятичными HTML-сущностями (подобно тому, как это делает браузер при отправке формы).
      var 
        encodeURIComponentUTF8 = encodeURIComponent;
      (function()
      {
        var
          cp1251codetable = "0402,0403,201A,0453,201E,2026,2020,2021,20AC,2030,0409,2039,040A,040C,040B,040F,0452,2018,2019,201C,201D,2022,2013,2014,,2122,0459,203A,045A,045C,045B,045F,,040E,045E,0408,,0490,,,0401,,0404,,,,,0407,,,0406,0456,0491,,,,0451,2116,0454,,0458,0405,0455,0457".split(",");
        
        encodeURIComponent = function(str)
        {
          return escape(str).replace(/\+/g, '%2B').replace(/\%u([0-9A-F]{4})/gi, function(a, b)
          {
            var i = parseInt(b, 16), k;
            
            if (i >= 1040 && i <= 1103)
            {
              i -= 848;
            }
            else if ((k = $.inArray(b, cp1251codetable)) > -1)
            {
              i = k + 128;
            }
            
            return (i < 256)
              ? "%" + i.toString(16).toUpperCase()
              : "%26%23" + i + "%3B";
          });
        }
      })();

      Знаю, что не особо оптимально, потом допилю пару мелочей.
      Ответить
  • есть и такое решение:

    var str = 'Hello, world!', hexstr = '';
    for (var i=0;i<str.length;i++) {
    hexstr += '%'+str.charCodeAt(i).toString(16);
    }
    Ответить
    • Ваше решение юникодовое, а в исходном коде однобайтовая кодировка.
      Ответить

Добавить комментарий

Я, guest, находясь в здравом уме и твердой памяти, торжественно заявляю:

    А не использовать ли нам bbcode?


    8