1. JavaScript / Говнокод #2765

    +170.8

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    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, 11 Марта 2010

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

    • O_o а раньше вроде не было _такого_
      Ответить
    • Mail говнокодит!
      Ответить
    • Holy Shit!
      Ответить
    • mail.ru всегда говнокодил,
      см. верстку, ну например Папки, Входящие, Сомнительные....
      Это же просто убиться, я не говорю уж про таблицы
      Ответить
      • Так верстают только мудаки!
        Ответить
      • Не, смотреть не охота ) Я лучше POP3 поюзаю.
        Ответить
      • Я им как-то написал в поддержку по поводу их кривой верстки, из-за которой в Firefox 2 местами происходят колоссальные глюки. Ответили в том смысле, что "используйте современные браузеры типа IE8"! Пришлось сделать свой стиль.
        Ответить
        • Дружище, используй современные браузеры типа Firefox 3.6 )
          Ответить
          • Это ясно, но 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);
      }
      Ответить
      • Ваше решение юникодовое, а в исходном коде однобайтовая кодировка.
        Ответить

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