>>Транслит текста (содержымого) емейла (как реализовать?)

Тема в разделе "Как сделать...", создана пользователем biznesoft, 8 янв 2009.

Статус темы:
Закрыта.
  1. biznesoft

    biznesoft

    Регистр.:
    11 фев 2008
    Сообщения:
    510
    Симпатии:
    128
    Вот што я хочю реализовать, но мне нужна Ваша помощь в даном вопросе.
    Есть php+Msql (смарти шаблонизатор) скрипт , При регистрацыи нового пользователя на сайте, новому пользователю на емейл отправляетса сообщение (о том што он зареген там то там, ево даные и тд..).
    Ето все осуществляетса с помощи функцыи:
    PHP:
    $smarty_mail->assign"content"$content );
        
    $html $smarty_mail->fetch"шаблон.txt" );

        
    /*$res = ss_mail( CONF_Reg, Reg2." номер ".$ID,
                    $html, 
                    "From: \"".CONF_SITE_NAME."\"<".CONF_GENERAL_EMAIL.">\n".
                        stripslashes(EMAIL_MESSAGE_PARAMETERS)."\nReturn-path: <".
                        CONF_GENERAL_EMAIL.">" );*/
        
    $res ss_mailCONF_Reg'=?'.DEFAULT_CHARSET.'?B?'.base64_encode(STRING_ORDER." номер ".$rID).'?=',
                    
    $html
                    
    "From: \"".'=?'.DEFAULT_CHARSET.'?B?'.base64_encode(CONF_SHOP_NAME).'?='."\"<".CONF_GENERAL_EMAIL.">\n".
                        
    stripslashes(EMAIL_MESSAGE_PARAMETERS)."\nReturn-path: <".
                        
    CONF_GENERAL_EMAIL.">" );
    }
    Содержание шаблона:
    PHP:
    {$smarty.const.TABLE_CUSTOMER}: {$customer_firstname} {$customer_lastname}
    {
    $smarty.const.CUSTOMER_EMAIL} {$customer_email}
    {
    section name=i loop=$customer_add_fields}
    {
    $customer_add_fields[i].reg_field_name}: {$customer_add_fields[i].reg_field_value}
    {/
    section}
    {
    $smarty.const.ADMIN_IP_ADDRESS}: {$customer_ip}
    {
    $smarty.const.STRING_ORDER_TIME}: {$order_time}
    {
    $smarty.const.STRING_CUSTOMER_COMMENTS}: {$customer_comments}
    Каким образом сделать транслитерацию содержымого которое будет отправляетса на емейл пользователю, тоисть штоб пользователю на емейл пришло письмо а текст в нем транслитом.

    Я так понимаю нужно написать функцию которая обработает даные и переведет их на транслит, а вот как сделать на етом конкретном примере?
     
  2. Lonely Wolf

    Lonely Wolf Прохожие

    Не верю что это ты писал, если ты сам в своём коде не знаешь где что добавить....

    Пример 1 без трансляции заголовка письма:
    PHP:
    function totranslit($var) {
     
    $NpjLettersFrom "абвгдезиклмнопрстуфцыі";
     
    $NpjLettersTo   "abvgdeziklmnoprstufcyi";
     
    $NpjBiLetters = array(        "й" => "jj""ё" => "jo""ж" => "zh""х" => "kh""ч" => "ch",        "ш" => "sh""щ" => "shh""э" => "je""ю" => "ju""я" => "ja",       "ъ" => """ь" => """ї" => "yi""є" => "ye",                               );
     
    $NpjCaps  "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЪЫЭЮЯЇЄІ";
     
    $NpjSmall "абвгдеёжзийклмнопрстуфхцчшщьъыэюяїєі";
     
    $var str_replace(".php"""$var);
     
    $var trim(strip_tags($var));
     
    $var preg_replace"/\s+/ms""-"$var );
     
    $var strtr$var$NpjCaps$NpjSmall );
     
    $var strtr$var$NpjLettersFrom$NpjLettersTo );
     
    $var strtr$var$NpjBiLetters );
     
    $var preg_replace("/[^a-z0-9\_\-.]+/mi"""$var);
     
    $var=preg_replace('#[\-]+#i''-'$var);
     
    $var strtolower $var );
     if (
    strlen($var) > 50) {
       
    $var substr ($var050);              
       if ((
    $temp_max strrpos($var'-')))  $var substr ($var0$temp_max);        
     }
     return 
    $var


    $smarty_mail->assign"content"$content ); 
        
    $html $smarty_mail->fetch("шаблон.txt");

        
    /*$res = ss_mail( CONF_Reg, Reg2." номер ".$ID, 
                    $html,  
                    "From: \"".CONF_SITE_NAME."\"<".CONF_GENERAL_EMAIL.">\n". 
                        stripslashes(EMAIL_MESSAGE_PARAMETERS)."\nReturn-path: <". 
                        CONF_GENERAL_EMAIL.">" );*/ 
        
    $res ss_mailCONF_Reg'=?'.DEFAULT_CHARSET.'?B?'.base64_encode(STRING_ORDER." номер ".$rID).'?='
                    
    totranslit($html),  
                    
    "From: \"".'=?'.DEFAULT_CHARSET.'?B?'.base64_encode(CONF_SHOP_NAME).'?='."\"<".CONF_GENERAL_EMAIL.">\n"
                        
    stripslashes(EMAIL_MESSAGE_PARAMETERS)."\nReturn-path: <"
                        
    CONF_GENERAL_EMAIL.">" ); 
    }
    Пример 2 с трансляции заголовка письма:
    PHP:
    function totranslit($var) {
     
    $NpjLettersFrom "абвгдезиклмнопрстуфцыі";
     
    $NpjLettersTo   "abvgdeziklmnoprstufcyi";
     
    $NpjBiLetters = array(        "й" => "jj""ё" => "jo""ж" => "zh""х" => "kh""ч" => "ch",        "ш" => "sh""щ" => "shh""э" => "je""ю" => "ju""я" => "ja",       "ъ" => """ь" => """ї" => "yi""є" => "ye",                               );
     
    $NpjCaps  "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЪЫЭЮЯЇЄІ";
     
    $NpjSmall "абвгдеёжзийклмнопрстуфхцчшщьъыэюяїєі";
     
    $var str_replace(".php"""$var);
     
    $var trim(strip_tags($var));
     
    $var preg_replace"/\s+/ms""-"$var );
     
    $var strtr$var$NpjCaps$NpjSmall );
     
    $var strtr$var$NpjLettersFrom$NpjLettersTo );
     
    $var strtr$var$NpjBiLetters );
     
    $var preg_replace("/[^a-z0-9\_\-.]+/mi"""$var);
     
    $var=preg_replace('#[\-]+#i''-'$var);
     
    $var strtolower $var );
     if (
    strlen($var) > 50) {
       
    $var substr ($var050);              
       if ((
    $temp_max strrpos($var'-')))  $var substr ($var0$temp_max);        
     }
     return 
    $var


    $smarty_mail->assign"content"$content ); 
        
    $html $smarty_mail->fetch("шаблон.txt");

        
    /*$res = ss_mail( CONF_Reg, Reg2." номер ".$ID, 
                    $html,  
                    "From: \"".CONF_SITE_NAME."\"<".CONF_GENERAL_EMAIL.">\n". 
                        stripslashes(EMAIL_MESSAGE_PARAMETERS)."\nReturn-path: <". 
                        CONF_GENERAL_EMAIL.">" );*/ 
        
    $res ss_mailCONF_Reg'=?'.DEFAULT_CHARSET.'?B?'.base64_encode(totranslit(STRING_ORDER." номер ".$rID)).'?='
                    
    totranslit($html),  
                    
    "From: \"".'=?'.DEFAULT_CHARSET.'?B?'.base64_encode(CONF_SHOP_NAME).'?='."\"<".CONF_GENERAL_EMAIL.">\n"
                        
    stripslashes(EMAIL_MESSAGE_PARAMETERS)."\nReturn-path: <"
                        
    CONF_GENERAL_EMAIL.">" ); 
    }
     
  3. biznesoft

    biznesoft

    Регистр.:
    11 фев 2008
    Сообщения:
    510
    Симпатии:
    128
    Спасибо за помощь, но к сожелению не работает, если дописать етот код ( в двух вариантах). Письмо на мейл приходит в кирилице (содержание)
    Я не писал што скрипт ето самопис, ето не самопис, ето шопскрипт.
    Я просто нипасал функц. кторая отвечает за ето.

    Я так понимаю:
    што ета функция
    PHP:
    $smarty_mail->assign"content"$content ); 
        
    $html $smarty_mail->fetch("шаблон.txt");

        
    /*$res = ss_mail( CONF_Reg, Reg2." номер ".$ID, 
                    $html,  
                    "From: \"".CONF_SITE_NAME."\"<".CONF_GENERAL_EMAIL.">\n". 
                        stripslashes(EMAIL_MESSAGE_PARAMETERS)."\nReturn-path: <". 
                        CONF_GENERAL_EMAIL.">" );*/ 
        
    $res ss_mailCONF_Reg'=?'.DEFAULT_CHARSET.'?B?'.base64_encode(STRING_ORDER." номер ".$rID).'?='
                    
    totranslit($html),  
                    
    "From: \"".'=?'.DEFAULT_CHARSET.'?B?'.base64_encode(CONF_SHOP_NAME).'?='."\"<".CONF_GENERAL_EMAIL.">\n"
                        
    stripslashes(EMAIL_MESSAGE_PARAMETERS)."\nReturn-path: <"
                        
    CONF_GENERAL_EMAIL.">" ); 

    только формируєт (берет из БД) даные: номер регистрацыи и емейл на каторый отправляетса письмо.

    А само содержание письма, беретса из шаблона ("шаблон.txt") ,
    PHP:
    {$smarty.const.TABLE_CUSTOMER}: {$customer_firstname} {$customer_lastname
    {
    $smarty.const.CUSTOMER_EMAIL} {$customer_email
    {
    section name=i loop=$customer_add_fields
    {
    $customer_add_fields[i].reg_field_name}: {$customer_add_fields[i].reg_field_value
    {/
    section
    {
    $smarty.const.ADMIN_IP_ADDRESS}: {$customer_ip
    {
    $smarty.const.STRING_ORDER_TIME}: {$order_time
    {
    $smarty.const.STRING_CUSTOMER_COMMENTS}: {$customer_comments
    тоисть ети функц. што там прописаны вытаскивают из БД инфу и отправляют на мейл. Я так понимаю нужно их транслировать (притом што шаблон имеет формат .txt), или я неправ?

    Но как сделать штоб ето все транслировалось латиницей?.
     
  4. Lonely Wolf

    Lonely Wolf Прохожие

    Второй код - это код шаблон.txt?
    Попробуй сделать так:
    PHP:
    function totranslit($var) {
     
    $NpjLettersFrom "абвгдезиклмнопрстуфцыі";
     
    $NpjLettersTo   "abvgdeziklmnoprstufcyi";
     
    $NpjBiLetters = array(        "й" => "jj""ё" => "jo""ж" => "zh""х" => "kh""ч" => "ch",        "ш" => "sh""щ" => "shh""э" => "je""ю" => "ju""я" => "ja",       "ъ" => """ь" => """ї" => "yi""є" => "ye",                               );
     
    $NpjCaps  "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЪЫЭЮЯЇЄІ";
     
    $NpjSmall "абвгдеёжзийклмнопрстуфхцчшщьъыэюяїєі";
     
    $var str_replace(".php"""$var);
     
    $var trim(strip_tags($var));
     
    $var preg_replace"/\s+/ms""-"$var );
     
    $var strtr$var$NpjCaps$NpjSmall );
     
    $var strtr$var$NpjLettersFrom$NpjLettersTo );
     
    $var strtr$var$NpjBiLetters );
     
    $var preg_replace("/[^a-z0-9\_\-.]+/mi"""$var);
     
    $var=preg_replace('#[\-]+#i''-'$var);
     
    $var strtolower $var );
     if (
    strlen($var) > 50) {
       
    $var substr ($var050);              
       if ((
    $temp_max strrpos($var'-')))  $var substr ($var0$temp_max);        
     }
     return 
    $var


    $smarty_mail->assign"content"$content ); 
        
    $html $smarty_mail->fetch("шаблон.txt");
    echo 
    "До:<br />".$html."<hr />После:<br />".totranslit($html)."<hr />";
    die();
        
    /*$res = ss_mail( CONF_Reg, Reg2." номер ".$ID, 
                    $html,  
                    "From: \"".CONF_SITE_NAME."\"<".CONF_GENERAL_EMAIL.">\n". 
                        stripslashes(EMAIL_MESSAGE_PARAMETERS)."\nReturn-path: <". 
                        CONF_GENERAL_EMAIL.">" );*/ 
        
    $res ss_mailCONF_Reg'=?'.DEFAULT_CHARSET.'?B?'.base64_encode(STRING_ORDER." номер ".$rID).'?='
                    
    totranslit($html),  
                    
    "From: \"".'=?'.DEFAULT_CHARSET.'?B?'.base64_encode(CONF_SHOP_NAME).'?='."\"<".CONF_GENERAL_EMAIL.">\n"
                        
    stripslashes(EMAIL_MESSAGE_PARAMETERS)."\nReturn-path: <"
                        
    CONF_GENERAL_EMAIL.">" ); 
    }
     
  5. biznesoft

    biznesoft

    Регистр.:
    11 фев 2008
    Сообщения:
    510
    Симпатии:
    128
    Да именно так, второй код ето код шаблона из которого берутса переменние потом из Бд регистрац. дание пользователя отправляютса на мейл.
    Если сделать так как више то на мейл письмо не приходит (не отправляетса), а в окне браузера ошибка такая:
    но уже штото:)
     
  6. Lonely Wolf

    Lonely Wolf Прохожие

    Не что-то а уже есть результат, только не понял почему у тебя в коде это не пашет, ну сделаем по другому.

    PHP:
    function totranslit($var) {
     
    $NpjLettersFrom "абвгдезиклмнопрстуфцыі";
     
    $NpjLettersTo   "abvgdeziklmnoprstufcyi";
     
    $NpjBiLetters = array(        "й" => "jj""ё" => "jo""ж" => "zh""х" => "kh""ч" => "ch",        "ш" => "sh""щ" => "shh""э" => "je""ю" => "ju""я" => "ja",       "ъ" => """ь" => """ї" => "yi""є" => "ye",                               );
     
    $NpjCaps  "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЪЫЭЮЯЇЄІ";
     
    $NpjSmall "абвгдеёжзийклмнопрстуфхцчшщьъыэюяїєі";
     
    $var strtr$var$NpjCaps$NpjSmall );
     
    $var strtr$var$NpjLettersFrom$NpjLettersTo );
     
    $var strtr$var$NpjBiLetters );
     return 
    $var


    $smarty_mail->assign"content"$content ); 
        
    $html $smarty_mail->fetch("шаблон.txt");
    echo 
    "До:<br />".$html."<hr />После:<br />".totranslit($html)."<hr />";
    $html totranslit($html);
    #die();
        /*$res = ss_mail( CONF_Reg, Reg2." номер ".$ID, 
                    $html,  
                    "From: \"".CONF_SITE_NAME."\"<".CONF_GENERAL_EMAIL.">\n". 
                        stripslashes(EMAIL_MESSAGE_PARAMETERS)."\nReturn-path: <". 
                        CONF_GENERAL_EMAIL.">" );*/ 
        
    $res ss_mailCONF_Reg'=?'.DEFAULT_CHARSET.'?B?'.base64_encode(STRING_ORDER." номер ".$rID).'?='
                    
    $html,  
                    
    "From: \"".'=?'.DEFAULT_CHARSET.'?B?'.base64_encode(CONF_SHOP_NAME).'?='."\"<".CONF_GENERAL_EMAIL.">\n"
                        
    stripslashes(EMAIL_MESSAGE_PARAMETERS)."\nReturn-path: <"
                        
    CONF_GENERAL_EMAIL.">" ); 
    }
     
  7. biznesoft

    biznesoft

    Регистр.:
    11 фев 2008
    Сообщения:
    510
    Симпатии:
    128
    Все СУПЕР все отлично работает, текст в письме идет транслитом :yahoo:
     
  8. Lonely Wolf

    Lonely Wolf Прохожие

    Знаешь где была ошибка? В тебе.
    Посмотри внимательно мой первый пост второй пример там именно трансляция идёт в функции ss_mail() не знаю почему ты мой код не скопипастил, поэтому у тебя ничего не транслировалось... зря потратили время на отладку.
    С заголовком письма тоже самое смотри первый пост, второй пример, я там тоже сделал...
    Хотя не зря я функцию трансляции отредактировал убрал лишнее, что резало текст и не так транслировало...
     
  9. biznesoft

    biznesoft

    Регистр.:
    11 фев 2008
    Сообщения:
    510
    Симпатии:
    128
    Да ето точно што ошибка была во мне, почему я не скопипастил, сам не понимаю, дай не внемательно код я посмотрел.
    Огромное спасибо за то што помог мне ;)
     
Статус темы:
Закрыта.