ФорумПрограммированиеPHP для идиотов → Подскажите аналог strtr для многобайтных кодировок?

Подскажите аналог strtr для многобайтных кодировок?

  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz 7 июля 2009 г. 15:47, спустя 14 минут 28 секунд

    бля, ну я не знаю как заставить strtr НЕ работать. просто работает.

    http://cmf.org.ru/testtrans.php

    http://cmf.org.ru/testtrans.zip
    ιιlllιlllι унц-унц
  • adw0rd

    Сообщения: 22944 Репутация: N Группа: в ухо

    Spritz 7 июля 2009 г. 15:49, спустя 1 минуту 42 секунды

    да забей, наверняка у меня где-то и что-то заглючило, главное что решил проблему, сенк
    + в карму
    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz 7 июля 2009 г. 16:43, спустя 53 минуты 49 секунд

    почемуто я этому не рад. где-то нас наябывают ©
    на всякий случай спасибо.
    ιιlllιlllι унц-унц
  • BoBka_altRUist

    Сообщения: 5 Репутация: N Группа: Кто попало

    Spritz 20 августа 2010 г. 5:37, спустя 408 дней 12 часов 53 минуты

    возможно кто-то из вас юзал
    strtr так:


            $s = "это тест";
    $rus = "абвгдезийклмнопрстуфхц";
    $lat = "abvgdezijklmnoprstufxc";
    $s = strtr($s, $rus, $lat);


    а кто-то так:

            $rus_lat = array('а'=>'a','б'=>'b','в'=>'v','г'=>'g','д'=>'d','е'=>'e','з'=>'z','и'=>'i','й'=>'j','к'=>'k','л'=>'l','м'=>'m','н'=>'n','о'=>'o','п'=>'p','р'=>'r','с'=>'s','т'=>'t','у'=>'u','ф'=>'f','х'=>'x','ц'=>'c');
    $s = strtr($s, $rus_lat);
  • BoBka_altRUist

    Сообщения: 5 Репутация: N Группа: Кто попало

    Spritz 20 августа 2010 г. 8:02, спустя 2 часа 9 минут 29 секунд

    это не обратимая транслитерация потому ничего особенного в ней нет ;)

    эта лучше, можно гонять туда-обратно и смысл фразы не изменится )))


    <?php

    function UpLow(&$string,$registr='up'){
    $upper = 'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯABCDEFGHIJKLMNOPQRSTUVWXYZ';

    $lower = 'абвгдеёжзийклмнопрстуфхцчшщъыьэюяabcdefghijklmnopqrstuvwxyz';

    if($registr == 'up') $string = strtr($string,$lower,$upper);
    else $string = strtr($string,$upper,$lower);

    } //function UpLow(&$string,$registr='up')

    function rus2lat($s) { // Функция обратимой перекодировки кириллицы в транслит.

    UpLow($s);

    $s=str_replace("ЫА","yha",$s);
    $s=str_replace("ЫО","yho",$s);
    $s=str_replace("ЫУ","yhu",$s);
    $s=str_replace("Ё","yo",$s);
    $s=str_replace("Ж","zh",$s);
    $rus = "АБВГДЕЗИЙКЛМНОПРСТУФХЦ";
    $lat = "abvgdezijklmnoprstufxc";
    $s = strtr($s, $rus, $lat);
    $s=str_replace("Ч","ch",$s);
    $s=str_replace("Ш","sh",$s);
    $s=str_replace("Щ","shh",$s);
    $s=str_replace("Ъ","qh",$s);
    $s=str_replace("Ы","y",$s);
    $s=str_replace("Ь","q",$s);
    $s=str_replace("Э","eh",$s);
    $s=str_replace("Ю","yu",$s);
    $s=str_replace("Я","ya",$s);
    //$s=str_replace(" ","_",$s); // сохраняем пробел от перехода в %20
    //$s=str_replace(",",".h",$s); // сохраняем запятую
    //$s=str_replace('"','&quot;',$s); // сохраняем кавычки
    //$s=rawurlencode($s);
    return $s;
    } // function rus2lat($s)


    function lat2rus($s) { // Функция обратной перекодировки транслита в кириллицу.
    $s=rawurldecode($s);
    //$s=str_replace(".h",",",$s);// возвращаем запятую
    //$s=str_replace("_"," ",$s);// возвращаем пробел
    $s=str_replace("yh","Ы",$s);
    $s=str_replace("yu","Ю",$s);
    $s=str_replace("ya","Я",$s);
    $s=str_replace("yo","Ё",$s);
    $s=str_replace("shh","Щ",$s);
    $s=str_replace("eh","Э",$s);
    $s=str_replace("sh","Ш",$s);
    $s=str_replace("ch","Ч",$s);
    $s=str_replace("qh","Ъ",$s);
    $s=str_replace("zh","Ж",$s);
    $lat = "abvgdezijklmnoprstufxcyq";
    $rus = "АБВГДЕЗИЙКЛМНОПРСТУФХЦЫЬ";
    $s = strtr($s, $lat, $rus);
    UpLow($s,'down');
    //$t_s = $s[0];
    //UpLow($t_s,'up');
    //$s[0] = $t_s;
    return $s;
    } // function lat2rus($s)

    echo lat2rus(rus2lat('это тест'));
    ?>
    Спустя 191 сек.
    млин, тут даже редактировать свое сообщение нельзя %(

    имел ввиду у phpdude - не обратимая, а та что я привел обратимая.
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 20 августа 2010 г. 11:17, спустя 3 часа 15 минут 15 секунд

    имел ввиду у phpdude - не обратимая, а та что я привел обратимая.

    то, что ты привел - доисторическое дерьмо, неработающее с ютф-8. тебе дорога в дле, до обратимой мне 1 параметр добавить и иф и готово, а тебе выбросить к хуям и переделывать :)
    Спустя 24 сек.
    да, у меня стиль объяснения такой, можешь не обижаться и не задавать вопросы не охуел ли я и тп слюни короче
    Сапожник без сапог
  • BoBka_altRUist

    Сообщения: 5 Репутация: N Группа: Кто попало

    Spritz 20 августа 2010 г. 12:14, спустя 57 минут 35 секунд

    почему же у меня работает ;) все отлично
  • Troy

    Сообщения: 2532 Репутация: N Группа: Джедаи

    Spritz 20 августа 2010 г. 12:17, спустя 2 минуты 10 секунд

    BoBka_altRUist, тебе сказали "в utf8 не будет работать"
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 20 августа 2010 г. 12:25, спустя 7 минут 54 секунды

    во, я родил ее)
    Спустя 30 сек.
    бля, не туда запостил, похуй.
    1. trunk.rar (19)
    Сапожник без сапог
  • BoBka_altRUist

    Сообщения: 5 Репутация: N Группа: Кто попало

    Spritz 23 августа 2010 г. 23:57, спустя 3 дня 11 часов 32 минуты

    там для юникода пару автозамен сделать - 5 минут
    вот:

        public function UpLow($string,$registr='up'){

    $upper_lower = array('А'=>'а','Б'=>'б','В'=>'в','Г'=>'г','Д'=>'д','Е'=>'е','Ё'=>'ё','Ж'=>'ж','З'=>'з','И'=>'и','Й'=>'й','К'=>'к','Л'=>'л','М'=>'м','Н'=>'н','О'=>'о','П'=>'п','Р'=>'р','С'=>'с','Т'=>'т','У'=>'у','Ф'=>'ф','Х'=>'х','Ц'=>'ц','Ч'=>'ч','Ш'=>'ш','Щ'=>'щ','Ъ'=>'ъ','Ы'=>'ы','Ь'=>'ь','Э'=>'э','Ю'=>'ю','Я'=>'я','A'=>'a','B'=>'b','C'=>'c','D'=>'d','E'=>'e','F'=>'f','G'=>'g','H'=>'h','I'=>'i','J'=>'j','K'=>'k','L'=>'l','M'=>'m','N'=>'n','O'=>'o','P'=>'p','Q'=>'q','R'=>'r','S'=>'s','T'=>'t','U'=>'u','V'=>'v','W'=>'w','X'=>'x','Y'=>'y','Z'=>'z');

    $lower_upper = array('а'=>'А','б'=>'Б','в'=>'В','г'=>'Г','д'=>'Д','е'=>'Е','ё'=>'Ё','ж'=>'Ж','з'=>'З','и'=>'И','й'=>'Й','к'=>'К','л'=>'Л','м'=>'М','н'=>'Н','о'=>'О','п'=>'П','р'=>'Р','с'=>'С','т'=>'Т','у'=>'У','ф'=>'Ф','х'=>'Х','ц'=>'Ц','ч'=>'Ч','ш'=>'Ш','щ'=>'Щ','ъ'=>'Ъ','ы'=>'Ы','ь'=>'Ь','э'=>'Э','ю'=>'Ю','я'=>'Я','a'=>'A','b'=>'B','c'=>'C','d'=>'D','e'=>'E','f'=>'F','g'=>'G','h'=>'H','i'=>'I','j'=>'J','k'=>'K','l'=>'L','m'=>'M','n'=>'N','o'=>'O','p'=>'P','q'=>'Q','r'=>'R','s'=>'S','t'=>'T','u'=>'U','v'=>'V','w'=>'W','x'=>'X','y'=>'Y','z'=>'Z');


    if($registr == 'up') $string = strtr($string,$lower_upper);
    else $string = strtr($string,$upper_lower);
    return $string;
    } //function UpLow(&$string,$registr='up')


    public function rus2lat($s) { // Функция обратимой перекодировки кириллицы в транслит.

    $s = self::UpLow($s);
    //а потом только кириллицу в нижний
    //return $s;
    $s=str_replace("ЫА","yha",$s);
    $s=str_replace("ЫО","yho",$s);
    $s=str_replace("ЫУ","yhu",$s);
    $s=str_replace("Ё","yo",$s);
    $s=str_replace("Ж","zh",$s);

    $rus_lat = array('А'=>'a','Б'=>'b','В'=>'v','Г'=>'g','Д'=>'d','Е'=>'e','З'=>'z','И'=>'i','Й'=>'j','К'=>'k','Л'=>'l','М'=>'m','Н'=>'n','О'=>'o','П'=>'p','Р'=>'r','С'=>'s','Т'=>'t','У'=>'u','Ф'=>'f','Х'=>'x','Ц'=>'c');
    $s = strtr($s, $rus_lat);

    $s=str_replace("Ч","ch",$s);
    $s=str_replace("Ш","sh",$s);
    $s=str_replace("Щ","shh",$s);
    $s=str_replace("Ъ","qh",$s);
    $s=str_replace("Ы","y",$s);
    $s=str_replace("Ь","q",$s);
    $s=str_replace("Э","eh",$s);
    $s=str_replace("Ю","yu",$s);
    $s=str_replace("Я","ya",$s);

    return $s;
    } // function rus2lat($s)
  • Troy

    Сообщения: 2532 Репутация: N Группа: Джедаи

    Spritz 24 августа 2010 г. 0:34, спустя 36 минут 27 секунд

    BoBka_altRUist, да не работает strtr с utf8 , тебе уже несколько раз сказали
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 24 августа 2010 г. 1:14, спустя 39 минут 54 секунды


    BoBka_altRUist, да не работает strtr с utf8 , тебе уже несколько раз сказали
    ага, а они (нубы) все еще мозг ебут ))))))))))))))))
    Сапожник без сапог
  • VaseninM

    Сообщения: 2416 Репутация: N Группа: Адекваты

    Spritz 24 августа 2010 г. 3:28, спустя 2 часа 13 минут 53 секунды

    :D Функция транслитации класная у юзера.
  • felix90

    Сообщения: 191 Репутация: N Группа: Адекваты

    Spritz 24 августа 2010 г. 13:21, спустя 9 часов 53 минуты 31 секунду


    BoBka_altRUist, да не работает strtr с utf8 , тебе уже несколько раз сказали

    Песдёшь! :)

    function translit($text)
    {
    $replace = array('Є'=>'EH','І'=>'I','і'=>'i','№'=>'#','є'=>'eh',
    'А'=>'A','Б'=>'B','В'=>'V','Г'=>'G','Д'=>'D',
    'Е'=>'E','Ё'=>'JO','Ж'=>'ZH',
    'З'=>'Z','И'=>'I','Й'=>'Y','К'=>'K','Л'=>'L',
    'М'=>'M','Н'=>'N','О'=>'O','П'=>'P','Р'=>'R',
    'С'=>'S','Т'=>'T','У'=>'U','Ф'=>'F','Х'=>'H',
    'Ц'=>'C','Ч'=>'CH','Ш'=>'SH','Щ'=>'SHH','Ъ'=>'\'',
    'Ы'=>'Y','Ь'=>'','Э'=>'EH','Ю'=>'YU','Я'=>'YA',
    'а'=>'a','б'=>'b','в'=>'v','г'=>'g','д'=>'d',
    'е'=>'e','ё'=>'jo','ж'=>'zh',
    'з'=>'z','и'=>'i','й'=>'y','к'=>'k','л'=>'l',
    'м'=>'m','н'=>'n','о'=>'o','п'=>'p','р'=>'r',
    'с'=>'s','т'=>'t','у'=>'u','ф'=>'f','х'=>'h',
    'ц'=>'c','ч'=>'ch','ш'=>'sh','щ'=>'shh','ъ'=>'',
    'ы'=>'y','ь'=>'','э'=>'eh','ю'=>'yu','я'=>'ya',
    '«'=>'"','»'=>'"','„'=>'"','“'=>'"','—'=>'-');

    $text = strtr($text, $replace);

    return preg_replace("#\s+#","_",$text);
    }

    Отлично всё работает)
    Спустя 168 сек.
    Оказывается до меня уже сказали об этом на первой странице) Всё отлично работает, если саму функцию сохранить под ютф-8.
    Спустя 36 сек.
    ЗЫ форум подвисает малёха при добавлении сообщения :)

Пожалуйста, авторизуйтесь, чтобы написать комментарий!