1. PHP / Говнокод #7671

    +147

    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
    function str_from_translit($st)
    {
    
    
        $trans = array(
            "a" => "а",
            "b" => "б",
            "v" => "в",
            "g" => "г",
            "d" => "д",
            "e" => "е",
            "j" => "ж",
            "z" => "з",
            "i" => "и",
            "k" => "к",
            "l" => "л",
            "m" => "м",
            "n" => "н",
            "o" => "о",
            "p" => "п",
            "r" => "р",
            "s" => "с",
            "t" => "т",
            "y" => "у",
            "f" => "ф",
            "h" => "х",
            "c" => "ц",
            "ch" => "ч",
            "sh" => "ш",
            "sh" => "щ",
            "A" => "А",
            "B" => "Б",
            "V" => "В",
            "G" => "Г",
            "D" => "Д",
            "E" => "Е",
            "J" => "Ж",
            "Z" => "З",
            "I" => "И",
            "K" => "К",
            "L" => "Л",
            "M" => "М",
            "N" => "Н",
            "O" => "О",
            "P" => "П",
            "R" => "Р",
            "S" => "С",
            "T" => "Т",
            "Y" => "У",
            "F" => "Ф",
            "H" => "Х",
            "C" => "Ц",
        );
        return strtr($st, $trans);
    }

    Запостил: amerov, 27 Августа 2011

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

    • заминусуйте меня - но как надо?
      разве что я бы вынес данные из кода
      Ответить
      • А я бы первым делом убрал большие буквы.
        Минусну.
        Ответить
      • А поцхему Вы спрасхиваете?

        Спойлер: (После того, как "c" поменяется на "ц", пара "ch" -> "ч" будет проигнорирована, и "ch" превратится в "цх".)
        Ответить
        • ну это уже мелочи.
          "s" => "с",
          "sh" => "ш",
          "sh" => "щ",
          Ответить
          • Проверил. Я наврал. Выбирается самый длинный ключ, поэтому sh и ch транслируются. Однако, "ш" мы никогда не увидим, потому что "sh" => "щ" перекрывает предыдущее определение.
            Ответить
      • Если в языке есть функция strtr, то её используют.
        Ответить
    • да, траснлит не по ГОСТУ, но где, собсна, говно?
      Ответить
      • Так выше уже написали. Хотя бы два элемента с ключом "sh".
        Ответить
      • Хотя бы дублирование маленьких и больших. Хотя достаточно задать только таблицу для low-case.
        Ах да, извините, я забыл, что пехепешники не знают о циклах. В таком случае говна там нет.
        Ответить
        • В транслите есть ещё тема для холивара, как передавать заглавные русские буквы комбинацией латинских. Пехепешнику придётся рассматривать "SH", "Sh", "sh", "CH", "Ch", "ch". А если ещё и "щ" представить как "shch", то... бедный, бедный пехепешник.
          Ответить
    • Минусую. Тому, кто запостил, явно не понравилась длина кода и он посчитал это как гавнокод.
      Ответить
    • >> $trans

      хм..
      Ответить
    • Тут 3 момента с "s":
      "s" => "с", // "sh" меняется таким образом на "сх", а не на "ш"
      "sh" => "ш", // этот ключ перетирается следующим
      "sh" => "щ",


      Ну как же не говно, когда
      > echo str_from_translit("Shla Sasha po shosse i sosala sushku");
      > Схла Саща по щоссе и сосала сuщкu
      Ответить
    • Оно транслитерирует у как y? Наказать школьника!
      Ответить
    • Тут есть нюанс, такой как то, что более длинный ключ массива надо объявлять раньше коротких.
      На этом все. В остальном - это круто.
      Я до сего момента делал два массива и гнал str_ireplace.
      Но! strtr регистрозависима.
      Так что можно сделать один массив с лоукейсом, а потом return str_ireplace(array_keys($trans), $trans, $st);
      Хотя затрудняюсь сказать, что быстрее отработает на хайлоад-проектах - два массива или один с array_keys.
      Ответить
    • Абвгдейка!
      Ответить

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