• XSS.stack #1 – первый литературный журнал от юзеров форума

Пишем скрипт отправки SMS на PHP

Winux

Старожил форума
Легенда
Регистрация
12.11.2004
Сообщения
6 358
Реакции
53
Достаточно актуальная на сегодняшний момент статья. Случайно наткнулся в нете на 1 из сайтов, думаю будет всем интересно.

Часть 1
Большинство из нас имеют мобилки, и очень часто пользуются такой услугой, как отправка SMS-сообщений. И, наверное, все задумывались, как бы сделать так, что бы эти самые SMS-сообщения можно было отправлять бесплатно. Мой вариант, конечно, не совсем можно считать «бесплатным», но те из нас, кто имеет анлимитный доступ в интернет (дома \ на работе) смогут без всяких на то затрат отправлять смс-ки со своего компьютера.

Что для этого нужно?

Во-первых, прямые руки и желание.
Во-вторых, хоть какие то знания в php и html.
В-третьих, иметь зарегистрированное место на каком-то сервере, который поддерживает php (можно на бесплатном, могу посоветовать www.h1.ru или www.iatp.org.ua).

Приступаем к работе.

У нас будет всего два файла: один это html-страница (тобиш index.html), которая будет содержать форму отправки смс-ок, второй – php-скрипт (тобиш send.php) отправки наших смс-ок.
И так перед вами исходник index.html:
Код:
<FORM ACTION="send.php" METHOD=POST>
<TABLE BORDER=0>
<TR>
<TD>Номер телефона:</TD>
<TD><input type=text name="phone" cols=40></TD></TR>
<TR>
<TD>Выбор оператора:</TD>
<TD><select name=operator size=1>
<option value=01 selected>operator 1</option>
<option value=02>operator 2</option>
<option value=03>operator3</option></TD></TR>
<TR>
<TD colspan=2>
Сообщение: 
<textarea name="sms" cols=40 rows=5></textarea></TD></TR>
<TR>
<TD colspan=2 align=center><input type=submit value="Отправить"> <input type=reset value="Очистить"></TD></TR>
</TABLE></FORM>
Здесь все очень просто - имеесться форма заполнения полей, необходимых для отправки сообщений.
Исходник нашего скрипта send.php:
Код:
<?
$mail_addr = $_POST["phone"];
$text = $_POST["sms"];
switch ($_POST["operator"]) {
case "01": // operator1
$mail_addr .= "@operator1.com";
break;
case "02": // operator2
$mail_addr .= "@operator2.com";
break;
case "03": // operator3
$mail_addr .= "@operator3.com";
break;
// Здесь для других операторов...
}
$mes="$text";
mail($mail_addr, "", $mes);
echo "Ваше SMS на номер $mail_addr 
 с текстом: $mes 
 отправлено
<center><a href='index.html'>Отправить ещё</a>";
?>
Здесь тоже все очень просто - получиные данные с index.html мы подставляем и получаем простую, но эффективную програму для отправки sms-сообщений. Следует заметить, что "@operator.com" нужно заменить на адрес оператора на телефоны, которого вы будете отправлять sms-сообщения, т.е. к примеру, что бы отправить sms на телефон украинского оператора Kyivstar (пакет Ace&Bace) нужно вписать "@2sms.kyivstar.net".
Все - програма готова. Теперь заливаем эти файлы на наш зарание подготовленный сервер и отправляем смс-ки!
Но в этом скрипте есть также и очень важный момент - вы не сможете отправлять sms-ки на телефоны операторов, которые не потдерживают отправку с e-mail'а.

В 2 части статьи мы добавим транслит с кирилицы в латиницу (привет -> privet), что позволит нам значительно увеличить размер сообщения (ведь если писать в кирилице то максимальная длина сообщения составит всего лишь 70 символов, а в латинице - 160).
Удачи!

Часть 2
И так, как я и обещал во воторой части стаьи "Пишем скрипт отправки SMS на PHP", мы с вами напишем транcлит для нашей прогрмы.

И так приступим

Все, что нам нужно это отредактировать и добавить один java*script в нашу "главную страницу" (inde.html).
В самое начало добавлем выше упомянутый скрипт:
Код:
<script language="java*script"">
<!--
var maxLen=160;
 function setLen(dcs)
{
  if( dcs == 0 )
  {
    maxLen = 160;
  }
  else
  {
    maxLen = 70;
  }
  checkLen();
}

function setmaxlng()
{
document.text.len.value = maxLength;
}

function checkLen()
{
   if (document.all) {
      str = text.sms.value;
      len = str.length;
   }
   else{
       str = document.forms.text.sms.value;
       len = document.forms.text.name.textLength;
   }
   var rusLen = 0;
   if(document.forms.text.dcs[1].checked){
       var re = /[ёжцчшюя??]/i;
       var re1 = /[щ]/i;
       for(i=0;i<=len;i++){
           if(re.test(str.substr(i,1))){
           rusLen = rusLen +1;
           }
           if(re1.test(str.substr(i,1))){
           rusLen = rusLen +2;
           }
       }
   }
   fullLen = maxLen - rusLen;
  if ( len > fullLen) document.forms.text.sms.value = str.substring(0,fullLen);
  document.forms.text.len.value = (fullLen - document.forms.text.sms.value.length);
  document.forms.text.sms.focus();
}
// ------------------------------------Start garbage-----------------------------------------
// Translit:
// -------------------------- CONVERT TO RUS --------------------------
// 1 character letters
eng_table = "ABVGDEZIJKLMNOPRSTUFHXCYabvgdezijklmnoprstufhxcy'";
rus_table = "АБВГДЕЗИЙКЛМНОПРСТУФХХЦЫабвгдезийклмнопрстуфххцыь";
// 2 character letters
eng_table2 = "YOJOZHCHSHYUJUYAJAyojozhchshyujuyajaYoYoZhChShYuJuYaJa";
rus_table2 = "ЁЁЖЧШЮЮЯЯёёжчшююяяЁЁЖЧШЮЮЯЯ";

function translit2win(str)
{
var len = str.length;
var new_str="";

for (i = 0; i < len; i++)
{
 // Check for 2-character letters
 is2char=false;
 if (i < len-1)
 {
  for(j = 0; j < rus_table2.length; j++)
  {
   if(str.substr(i, 2) == eng_table2.substr(j*2,2))
   {
    new_str+= rus_table2.substr(j, 1);
    i++;
    is2char=true;
    break;
   }
  }
 }

 if(!is2char)
 {
  // Convert one-character letter
  var c = str.substr(i, 1);
  var pos = eng_table.indexOf(c);
  if (pos < 0)
   new_str+= c;
  else
   new_str+= rus_table.substr(pos, 1);
 }
}
return new_str;
}
 

// -------------------------- CONVERT TO LAT --------------------------
lat_eng_table = "ABVGDEJZIYKLMNOPRSTUFH4CIabvgdejziyklmnoprstufh4ci'";
lat_rus_table = "АБВГДЕЖЗИЙКЛМНОПРСТУФХЧЦЫабвгдежзийклмнопрстуфхчцыь";

function translit2lat(str)
{
var len = str.length;
var new_str="";

for (i = 0; i < len; i++)
{
 // Check for 2-character letters
 is2char=false;
 if (i < len)
 {
  if(str.substr(i, 1) == 'Ю')
  {
   new_str += 'YU ';
   i++;
   is2char=true;
  }
  if(str.substr(i, 1) == 'ю')
  {
   new_str += 'yu ';
   i++;
   is2char=true;
  }
 
  if(str.substr(i, 1) == 'Я')
  {
   new_str += 'YA ';
   i++;
   is2char=true;
  }
  if(str.substr(i, 1) == 'я')
  {
//    alert("1"+str.substr(i, 1)+"1");
   new_str += 'ya ';
   i++;
   is2char=true;
  }
 }
 // Convert one-character letter
 if(!is2char)
 {
  var c = str.substr(i, 1);
  var pos = lat_rus_table.indexOf(c);
  if (pos < 0)
   new_str+= c;
  else
   new_str+= lat_eng_table.substr(pos, 1);
 }
}
return new_str;
}
// ------------------------------------end garbage-----------------------------------------
function openTranslit()
{
var myUrl = "translit.html";
myWin=window.open(myUrl, "wind1", "width=800,height=745,resizable=no,scrollbars=no,menubar=no");
}

// *********************************************************************************
/*var rus_lr2 = ('Е-е-О-о-Ё-Ё-Ё-Ё-Ж-Ж-Ч-Ч-Ш-Ш-Щ-Щ-Ъ-Ь-Э-Э-Ю-Ю-Я-Я-Я-Я-ё-ё-ж-ч-ш-щ-э-ю-я-я').split('-');
var lat_lr2 = ('/E-/e-/O-/o-ЫO-Ыo-ЙO-Йo-ЗH-Зh-ЦH-Цh-СH-Сh-ШH-Шh-ъ'+String.fromCharCode(35)+'-ь'+String.fromCharCode(39)+'-ЙE-Йe-ЙU-Йu-ЙA-Йa-ЫA-Ыa-ыo-йo-зh-цh-сh-шh-йe-йu-йa-ыa').split('-');
var rus_lr1 = ('А-Б-В-Г-Д-Е-З-И-Й-К-Л-М-Н-О-П-Р-С-Т-У-Ф-Х-Х-Ц-Щ-Ы-Я-а-б-в-г-д-е-з-и-й-к-л-м-н-о-п-р-с-т-у-ф-х-х-ц-щ-ъ-ы-ь-ь-я').split('-');
var lat_lr1 = ('A-B-V-G-D-E-Z-I-J-K-L-M-N-O-P-R-S-T-U-F-H-X-C-W-Y-Q-a-b-v-g-d-e-z-i-j-k-l-m-n-o-p-r-s-t-u-f-h-x-c-w-'+
+String.fromCharCode(35)+'-y-'+String.fromCharCode(39)+'-'+String.fromCharCode(96)+'-q').split('-');
var rus_rl = ('А-Б-В-Г-Д-Е-Ё-Ж-З-И-Й-К-Л-М-Н-О-П-Р-С-Т-У-Ф-Х-Ц-Ч-Ш-Щ-Ъ-Ы-Ь-Э-Ю-Я-а-б-в-г-д-е-ё-ж-з-и-й-к-л-м-н-о-п-р-с-т-у-ф-х-ц-ч-ш-щ-ъ-ы-ь-э-ю-я').split('-');
var lat_rl = ('A-B-V-G-D-E-JO-ZH-Z-I-J-K-L-M-N-O-P-R-S-T-U-F-H-C-CH-SH-SHH-'+String.fromCharCode(35)+String.fromCharCode(35)+'-Y-'+String.fromCharCode(39)+String.fromCharCode(39)+
+'-JE-JU-JA-a-b-v-g-d-e-jo-zh-z-i-j-k-l-m-n-o-p-r-s-t-u-f-h-c-ch-sh-shh-'+String.fromCharCode(35)+'-y-'+String.fromCharCode(39)+'-je-ju-ja').split('-');

var lat = ('/E_/e_/O_/ o_Шh_Йo_Зh_Цh_Сh_Йe_Йu_Йa_Ыo_Ыu_Ыa_ШH_ЙO_ЗH_ЦH_СH_ЙE_ЙU_ЙA_ЫO_ЫU_ЫA_A_B_V_G_D_E_Z_I_J_K_L_M_N_O_P_R_
S_T_U_F_X_C_ъ#_Y_ь\'_H_W_Q_шh_йo_зh_цh_сh_йe_йu_йa_ыo_ыa_a_b_v_g_d_e_z_i_j_k_l_m_n_o_p_r_s_t_u_f_x_c_#_y_\'_h_w_q').split('_');
var rus = (& #39;E_e_O_o_Щ_Ё_Ж_Ч_Ш_Э_Ю_Я_Ё_Ю_Я_Щ_Ё_Ж_Ч_Ш_Э_Ю_Я_Ё_Ю_Я_А_Б_В_Г_Д_Е_З_И_Й_К_Л_М_Н_О_П_Р_С_Т_У_Ф_Х_Ц_
Ъ_Ы_Ь_Х_Щ_Я_щ_ё_ж_ч_ш_э_ю_я_ё_я_а_б_в_г_д_е_з_и_й_к_л_м_н_о_п_р_с_т_у_ф_х_ц_ъ_ы_ь_х_щ_я').split('_');
var rus2 = (& #39;Щ_Ё_Ж_Ч_Ш_Э_Ю_Я_А_Б_В_Г_Д_Е_З_И_Й_К_Л_М_Н_О_П_Р_С_Т_У_Ф_Х_Ц_Ъ_Ы_Ь_щ_ё_ж_ч_ш_э_ю_я_а_б_в_г_д_е_з_
и_й_к_л_м_н_о_п_р_с_т_у_ф_х_ц_ъ_ы_ь').split('_');
var lat2 = ('SHH_JO_ZH_CH_SH_JE_JU_JA_A_B_V_G_D_E_Z_I_J_K_L_M_N_O_P_R_S_T_U_F_X_C_##_Y_\'\'_shh_jo_zh_ch_sh_je_ju_ja_a_b_v_g_d_e_z_i_j_k_l_m_n_o_p_r_s_t_u_f_x_c_#_y_\'').split('_');
*/

var rus_lr2 = ('Е-е-О-о-Ё-Ё-Ё-Ё-Ж-Ж-Ч-Ч-Ш-Ш-Щ-Щ-Ъ-Ь-Э-Э-Ю-Ю-Я-Я-Я-Я-ё-ё-ж-ч-ш-щ-э-ю-я-я').split('-');
var lat_lr2 = ('/E-/e-/O-/o-ЫO-Ыo-ЙO-Йo-ЗH-Зh-ЦH-Цh-СH-Сh-ШH-Шh-ъ'+String.fromCharCode(35)+'-ь'+String.fromCharCode(39)+'-ЙE-Йe-ЙU-Йu-ЙA-Йa-ЫA-Ыa-ыo-йo-зh-цh-сh-шh-йe-йu-йa-ыa').split('-');
var rus_lr1 = ('А-Б-В-Г-Д-Е-З-И-Й-К-Л-М-Н-О-П-Р-С-Т-У-Ф-Х-Ц-Щ-Ы-Я-а-б-в-г-д-е-з-и-й-к-л-м-н-о-п-р-с-т-у-ф-х-х-ц-щ-ъ-ы-ь-ь-я').split('-');
var lat_lr1 = ('A-B-V-G-D-E-Z-I-J-K-L-M-N-O-P-R-S-T-U-F-H-C-W-Y-Q-a-b-v-g-d-e-z-i-j-k-l-m-n-o-p-r-s-t-u-f-h-x-c-w-'+String.fromCharCode(35)+'-y-'+String.fromCharCode(39)+'-'+String.fromCharCode(96)+'-q').split('-');
var rus_rl = ('А-Б-В-Г-Д-Е-Ё-Ж-З-И-Й-К-Л-М-Н-О-П-Р-С-Т-У-Ф-Х-Ц-Ч-Ш-Щ-Ъ-Ы-Ь-Э-Ю-Я-а-б-в-г-д-е-ё-ж-з-и-й-к-л-м-н-о-п-р-с-т-у-ф-х-ц-ч-ш-щ-ъ-ы-ь-э-ю-я').split('-');
var lat_rl = ('A-B-V-G-D-E-JO-ZH-Z-I-J-K-L-M-N-O-P-R-S-T-U-F-H-C-CH-SH-SHH-'+String.fromCharCode(35)+String.fromCharCode(35)+'-Y-'+String.fromCharCode(39)+String.fromCharCode(39)+
+'-JE-JU-JA-a-b-v-g-d-e-jo-zh-z-i-j-k-l-m-n-o-p-r-s-t-u-f-h-c-ch-sh-shh-'+String.fromCharCode(35)+'-y-'+String.fromCharCode(39)+'-je-ju-ja').split('-');

var lat = ('/E_/e_/O_/ o_Шh_Йo_Зh_Цh_Сh_Йe_Йu_Йa_Ыo_Ыu_Ыa_ШH_ЙO_ЗH_ЦH_СH_ЙE_ЙU_ЙA_ЫO_ЫU_ЫA_A_B_V_G_D_E_Z_I_J_K_L_M_N_O_P_R_
S_T_U_F_H_C_ъ#_Y_ь\'_H_W_Q_шh_йo_зh_цh_сh_йe_йu_йa_ыo_ыa_a_b_v_g_d_e_z_i_j_k_l_m_n_o_p_r_s_t_u_f_h_c_#_y_\'_h_w_q').split('_');
var rus = (& #39;E_e_O_o_Щ_Ё_Ж_Ч_Ш_Э_Ю_Я_Ё_Ю_Я_Щ_Ё_Ж_Ч_Ш_Э_Ю_Я_Ё_Ю_Я_А_Б_В_Г_Д_Е_З_И_Й_К_Л_М_Н_О_П_Р_С_Т_У_Ф_Х_Ц_
Ъ_Ы_Ь_Х_Щ_Я_щ_ё_ж_ч_ш_э_ю_я_ё_я_а_б_в_г_д_е_з_и_й_к_л_м_н_о_п_р_с_т_у_ф_х_ц_ъ_ы_ь_х_щ_я').split('_');
var rus2 = (& #39;Щ_Ё_Ж_Ч_Ш_Э_Ю_Я_А_Б_В_Г_Д_Е_З_И_Й_К_Л_М_Н_О_П_Р_С_Т_У_Ф_Х_Ц_Ъ_Ы_Ь_щ_ё_ж_ч_ш_э_ю_я_а_б_в_г_д_е_з_
и_й_к_л_м_н_о_п_р_с_т_у_ф_х_ц_ъ_ы_ь').split('_');
var lat2 = ('SHH_JO_ZH_CH_SH_JE_JU_JA_A_B_V_G_D_E_Z_I_J_K_L_M_N_O_P_R_S_T_U_F_H_C_##_Y_\'\'_shh_jo_zh_ch_sh_je_ju_ja_a_b_v_g_d_e_z_i_j_k_l_m_n_o_p_r_s_t_u_f_h_c_#_y_\'').split('_');

var translitown=0;
var processhtmltags = 1; // switch to latin when the html tag <...> is typed in
var processbbcodetags = 1; // switch to latin when the bbcode tag [...] is typed in
var language = 0;
var maxtransliterationlength=3;
var lenreafontsize = 14; // WAENING: the value is defined in the main.css !!!
var textreafontwidth = 7; // The width of the text is supposed to be 7 !!!

var prelanguage = 0;

function translatesymboltocyrillic(txt)
{
for (var ii=0; ii<lat.length; ii++)
{
 pos = txt.length>lat[ii].length?(txt.length-lat[ii].length):0;
 if (lat[ii]==txt.substr(pos,txt.length-pos)) {
  return txt.substr(0,txt.length-lat[ii].length)+rus[ii];
 }
}
return txt;
}
function translatesymboltolatin(symb)
{
for (var ii=0;ii<rus2.length;ii++)
{
 if (rus2[ii]==symb)
 return lat2[ii];
}
return symb;
}

function translateAlltoCyrillic()
{
var inloop=1;
tt = window.document.text.sms;
p1 = tt.selectionStart; p2 = tt.selectionEnd;
var preval = ""; var postval="";
if (p1==p2) {txt = tt.value;}
else
{
 preval = tt.value.substring(0, p1);
 txt = tt.value.substring(p1,p2);
 postval = tt.value.substring(p2);
}
var txtnew = "";
if ((!processhtmltags)&&(!processbbcodetags))
{
 txtnew = translateStringtoCyrillic(txt);
}
else
{
 var htt1,pbb1,t1,t2,txt1,txt2,tag_open,tag_close;
 var noinputtag=0;
 if (processhtmltags) {tag_open="<";tag_close=">";}
 if (processbbcodetags) {tag_open="[";tag_close="]";}
 while(inloop)
 {
  if (processhtmltags&&processbbcodetags)
  {
   htt1 = txt.indexOf("<");
   pbb1 = txt.indexOf("[");
   if (pbb1==htt1) {noinputtag=1}
   if (pbb1==-1) {pbb1=txt.length;}
   if (htt1==-1) {htt1=txt.length;}  
   if (htt1<pbb1) {t1=htt1; tag_close=">";} else {t1=pbb1; tag_close="]";}
  }
  else
  {
   t1 = txt.indexOf(tag_open);
   if (t1==-1) noinputtag=1;
  }
  if (noinputtag) {inloop=0;t1=txt.length;t2=txt.length;}
  else
  {
   txt2=txt.substring(t1,txt.length);
   t2=txt2.indexOf(tag_close);
   //if (t2==-1) {t2=txt.length; inloop=0;} else {t2=t2+t1+1};
   if (t2==-1) {t2=t1+1} else {t2=t2+t1+1};
  }
  txt1 = txt.substring(0,t1);
  txt2 = txt.substring(t1,t2);
  txt = txt.substring(t2,txt.length);
  txtnew = txtnew+translateStringtoCyrillic(txt1)+txt2;  
 }
}
tt.value = preval+txtnew+postval;
if (p1!=p2) {tt.setSelectionRange(p1+txtnew.length,p1+txtnew.length);}
tt.focus();
return true;
}
function translateStringtoCyrillic(thestringlat)
{
var symbb,fromm,howmuch,thestringcyr="";
for (kk=0;kk<thestringlat.length;kk++)
{
 howmuch = thestringcyr.length>maxtransliterationlength?maxtransliterationlength:thestringcyr.length;
 fromm = thestringcyr.length-howmuch;
 symbbb = thestringlat.substr(kk,1);
 symbbb = translatesymboltocyrillic(thestringcyr.substr(fromm,howmuch)+symbbb);
 thestringcyr = thestringcyr.substr(0,fromm)+symbbb;  
}
return thestringcyr;
}
function translateAlltoLatin()
{
tt = window.document.text.sms;
p1 = tt.selectionStart; p2 = tt.selectionEnd;
var preval = ""; var postval="";
if (p1==p2) {txt = tt.value;}
else
{
 preval = tt.value.substring(0, p1);
 txt = tt.value.substring(p1,p2);
 postval = tt.value.substring(p2);
}
txtnew="";
var symb = "";
for (kk=0;kk<txt.length;kk++)
{
 symb = translatesymboltolatin(txt.substr(kk,1));
 txtnew = txtnew.substr(0,txtnew.length) + symb;
}
tt.value = preval+txtnew+postval;
if (p1!=p2) {tt.setSelectionRange(p1+txtnew.length,p1+txtnew.length);}
tt.focus();
return true;
}

//-->
</script>
А затем немного редактируем и саму форму отправки.
В итоге наш файл index.html должен иметь такой вид (вместе с java*script'ом транслита):
Код:
<html>
<head>
<meta HTTP-EQUIV="content-type" CONTENT="text/html; charset=koi8-r">
<title>SMS</title>
<script language="java*script"">
<!--
var maxLen=160;
 function setLen(dcs)
{
  if( dcs == 0 )
  {
    maxLen = 160;
  }
  else
  {
    maxLen = 70;
  }
  checkLen();
}

function setmaxlng()
{
document.text.len.value = maxLength;
}

function checkLen()
{
   if (document.all) {
      str = text.sms.value;
      len = str.length;
   }
   else{
       str = document.forms.text.sms.value;
       len = document.forms.text.name.textLength;
   }
   var rusLen = 0;
   if(document.forms.text.dcs[1].checked){
       var re = /[ёжцчшюя??]/i;
       var re1 = /[щ]/i;
       for(i=0;i<=len;i++){
           if(re.test(str.substr(i,1))){
           rusLen = rusLen +1;
           }
           if(re1.test(str.substr(i,1))){
           rusLen = rusLen +2;
           }
       }
   }
   fullLen = maxLen - rusLen;
  if ( len > fullLen) document.forms.text.sms.value = str.substring(0,fullLen);
  document.forms.text.len.value = (fullLen - document.forms.text.sms.value.length);
  document.forms.text.sms.focus();
}
// ------------------------------------Start garbage-----------------------------------------
// Translit:
// -------------------------- CONVERT TO RUS --------------------------
// 1 character letters
eng_table = "ABVGDEZIJKLMNOPRSTUFHXCYabvgdezijklmnoprstufhxcy'";
rus_table = "АБВГДЕЗИЙКЛМНОПРСТУФХХЦЫабвгдезийклмнопрстуфххцыь";
// 2 character letters
eng_table2 = "YOJOZHCHSHYUJUYAJAyojozhchshyujuyajaYoYoZhChShYuJuYaJa";
rus_table2 = "ЁЁЖЧШЮЮЯЯёёжчшююяяЁЁЖЧШЮЮЯЯ";

function translit2win(str)
{
var len = str.length;
var new_str="";

for (i = 0; i < len; i++)
{
 // Check for 2-character letters
 is2char=false;
 if (i < len-1)
 {
  for(j = 0; j < rus_table2.length; j++)
  {
   if(str.substr(i, 2) == eng_table2.substr(j*2,2))
   {
    new_str+= rus_table2.substr(j, 1);
    i++;
    is2char=true;
    break;
   }
  }
 }

 if(!is2char)
 {
  // Convert one-character letter
  var c = str.substr(i, 1);
  var pos = eng_table.indexOf(c);
  if (pos < 0)
   new_str+= c;
  else
   new_str+= rus_table.substr(pos, 1);
 }
}
return new_str;
}
 

// -------------------------- CONVERT TO LAT --------------------------
lat_eng_table = "ABVGDEJZIYKLMNOPRSTUFH4CIabvgdejziyklmnoprstufh4ci'";
lat_rus_table = "АБВГДЕЖЗИЙКЛМНОПРСТУФХЧЦЫабвгдежзийклмнопрстуфхчцыь";

function translit2lat(str)
{
var len = str.length;
var new_str="";

for (i = 0; i < len; i++)
{
 // Check for 2-character letters
 is2char=false;
 if (i < len)
 {
  if(str.substr(i, 1) == 'Ю')
  {
   new_str += 'YU ';
   i++;
   is2char=true;
  }
  if(str.substr(i, 1) == 'ю')
  {
   new_str += 'yu ';
   i++;
   is2char=true;
  }
 
  if(str.substr(i, 1) == 'Я')
  {
   new_str += 'YA ';
   i++;
   is2char=true;
  }
  if(str.substr(i, 1) == 'я')
  {
//    alert("1"+str.substr(i, 1)+"1");
   new_str += 'ya ';
   i++;
   is2char=true;
  }
 }
 // Convert one-character letter
 if(!is2char)
 {
  var c = str.substr(i, 1);
  var pos = lat_rus_table.indexOf(c);
  if (pos < 0)
   new_str+= c;
  else
   new_str+= lat_eng_table.substr(pos, 1);
 }
}
return new_str;
}
// ------------------------------------end garbage-----------------------------------------
function openTranslit()
{
var myUrl = "translit.html";
myWin=window.open(myUrl, "wind1", "width=800,height=745,resizable=no,scrollbars=no,menubar=no");
}

// *********************************************************************************
/*var rus_lr2 = ('Е-е-О-о-Ё-Ё-Ё-Ё-Ж-Ж-Ч-Ч-Ш-Ш-Щ-Щ-Ъ-Ь-Э-Э-Ю-Ю-Я-Я-Я-Я-ё-ё-ж-ч-ш-щ-э-ю-я-я').split('-');
var lat_lr2 = ('/E-/e-/O-/o-ЫO-Ыo-ЙO-Йo-ЗH-Зh-ЦH-Цh-СH-Сh-ШH-Шh-ъ'+String.fromCharCode(35)+'-ь'+String.fromCharCode(39)+
+'-ЙE-Йe-ЙU-Йu-ЙA-Йa-ЫA-Ыa-ыo-йo-зh-цh-сh-шh-йe-йu-йa-ыa').split('-');
var rus_lr1 = ('А-Б-В-Г-Д-Е-З-И-Й-К-Л-М-Н-О-П-Р-С-Т-У-Ф-Х-Х-Ц-Щ-Ы-Я-а-б-в-г-д-е-з-и-й-к-л-м-н-о-п-р-с-т-у-ф-х-х-ц-щ-ъ-ы-ь-ь-я').split('-');
var lat_lr1 = ('A-B-V-G-D-E-Z-I-J-K-L-M-N-O-P-R-S-T-U-F-H-X-C-W-Y-Q-a-b-v-g-d-e-z-i-j-k-l-m-n-o-p-r-s-t-u-f-h-x-c-w-'+
+String.fromCharCode(35)+'-y-'+String.fromCharCode(39)+'-'+String.fromCharCode(96)+'-q').split('-');
var rus_rl = ('А-Б-В-Г-Д-Е-Ё-Ж-З-И-Й-К-Л-М-Н-О-П-Р-С-Т-У-Ф-Х-Ц-Ч-Ш-Щ-Ъ-Ы-Ь-Э-Ю-Я-а-б-в-г-д-е-ё-ж-з-и-й-к-л-м-н-о-п-р-с-т-у-ф-х-ц-ч-ш-щ-ъ-ы-ь-э-ю-я').split('-');
var lat_rl = ('A-B-V-G-D-E-JO-ZH-Z-I-J-K-L-M-N-O-P-R-S-T-U-F-H-C-CH-SH-SHH-'+String.fromCharCode(35)+String.fromCharCode(35)+'-Y-'+String.fromCharCode(39)+
+String.fromCharCode(39)+'-JE-JU-JA-a-b-v-g-d-e-jo-zh-z-i-j-k-l-m-n-o-p-r-s-t-u-f-h-c-ch-sh-shh-'+String.fromCharCode(35)+'-y-'+String.fromCharCode(39)+'-je-ju-ja').split('-');

var lat = ('/E_/e_/O_/ o_Шh_Йo_Зh_Цh_Сh_Йe_Йu_Йa_Ыo_Ыu_Ыa_ШH_ЙO_ЗH_ЦH_СH_ЙE_ЙU_ЙA_ЫO_ЫU_ЫA_A_B_V_G_D_E_Z_I_J_K_L_M_N_O_P_R_
S_T_U_F_X_C_ъ#_Y_ь\'_H_W_Q_шh_йo_зh_цh_сh_йe_йu_йa_ыo_ыa_a_b_v_g_d_e_z_i_j_k_l_m_n_o_p_r_s_t_u_f_x_c_#_y_\'_h_w_q').split('_');
var rus = (& #39;E_e_O_o_Щ_Ё_Ж_Ч_Ш_Э_Ю_Я_Ё_Ю_Я_Щ_Ё_Ж_Ч_Ш_Э_Ю_Я_Ё_Ю_Я_А_Б_В_Г_Д_Е_З_И_Й_К_Л_М_Н_О_П_Р_С_Т_У_Ф_Х_Ц_
Ъ_Ы_Ь_Х_Щ_Я_щ_ё_ж_ч_ш_э_ю_я_ё_я_а_б_в_г_д_е_з_и_й_к_л_м_н_о_п_р_с_т_у_ф_х_ц_ъ_ы_ь_х_щ_я').split('_');
var rus2 = (& #39;Щ_Ё_Ж_Ч_Ш_Э_Ю_Я_А_Б_В_Г_Д_Е_З_И_Й_К_Л_М_Н_О_П_Р_С_Т_У_Ф_Х_Ц_Ъ_Ы_Ь_щ_ё_ж_ч_ш_э_ю_я_а_б_в_г_д_е_з_
и_й_к_л_м_н_о_п_р_с_т_у_ф_х_ц_ъ_ы_ь').split('_');
var lat2 = ('SHH_JO_ZH_CH_SH_JE_JU_JA_A_B_V_G_D_E_Z_I_J_K_L_M_N_O_P_R_S_T_U_F_X_C_##_Y_\'\'_shh_jo_zh_ch_sh_je_ju_ja_a_b_v_g_d_e_z_i_j_k_l_m_n_o_p_r_s_t_u_f_x_c_#_y_\'').split('_');
*/

var rus_lr2 = ('Е-е-О-о-Ё-Ё-Ё-Ё-Ж-Ж-Ч-Ч-Ш-Ш-Щ-Щ-Ъ-Ь-Э-Э-Ю-Ю-Я-Я-Я-Я-ё-ё-ж-ч-ш-щ-э-ю-я-я').split('-');
var lat_lr2 = ('/E-/e-/O-/o-ЫO-Ыo-ЙO-Йo-ЗH-Зh-ЦH-Цh-СH-Сh-ШH-Шh-ъ'+String.fromCharCode(35)+'-ь'+String.fromCharCode(39)+'-ЙE-Йe-ЙU-Йu-ЙA-Йa-ЫA-Ыa-ыo-йo-зh-цh-сh-шh-йe-йu-йa-ыa').split('-');
var rus_lr1 = ('А-Б-В-Г-Д-Е-З-И-Й-К-Л-М-Н-О-П-Р-С-Т-У-Ф-Х-Ц-Щ-Ы-Я-а-б-в-г-д-е-з-и-й-к-л-м-н-о-п-р-с-т-у-ф-х-х-ц-щ-ъ-ы-ь-ь-я').split('-');
var lat_lr1 = ('A-B-V-G-D-E-Z-I-J-K-L-M-N-O-P-R-S-T-U-F-H-C-W-Y-Q-a-b-v-g-d-e-z-i-j-k-l-m-n-o-p-r-s-t-u-f-h-x-c-w-'+String.fromCharCode(35)+'-y-'+String.fromCharCode(39)+'-'+String.fromCharCode(96)+'-q').split('-');
var rus_rl = ('А-Б-В-Г-Д-Е-Ё-Ж-З-И-Й-К-Л-М-Н-О-П-Р-С-Т-У-Ф-Х-Ц-Ч-Ш-Щ-Ъ-Ы-Ь-Э-Ю-Я-а-б-в-г-д-е-ё-ж-з-и-й-к-л-м-н-о-п-р-с-т-у-ф-х-ц-ч-ш-щ-ъ-ы-ь-э-ю-я').split('-');
var lat_rl = ('A-B-V-G-D-E-JO-ZH-Z-I-J-K-L-M-N-O-P-R-S-T-U-F-H-C-CH-SH-SHH-'+String.fromCharCode(35)+String.fromCharCode(35)+'-Y-'+
+String.fromCharCode(39)+String.fromCharCode(39)+'-JE-JU-JA-a-b-v-g-d-e-jo-zh-z-i-j-k-l-m-n-o-p-r-s-t-u-f-h-c-ch-sh-shh-'+String.fromCharCode(35)+'-y-'+String.fromCharCode(39)+'-je-ju-ja').split('-');

var lat = ('/E_/e_/O_/ o_Шh_Йo_Зh_Цh_Сh_Йe_Йu_Йa_Ыo_Ыu_Ыa_ШH_ЙO_ЗH_ЦH_СH_ЙE_ЙU_ЙA_ЫO_ЫU_ЫA_A_B_V_G_D_E_Z_I_J_K_L_M_N_O_P_R_
S_T_U_F_H_C_ъ#_Y_ь\'_H_W_Q_шh_йo_зh_цh_сh_йe_йu_йa_ыo_ыa_a_b_v_g_d_e_z_i_j_k_l_m_n_o_p_r_s_t_u_f_h_c_#_y_\'_h_w_q').split('_');
var rus = (& #39;E_e_O_o_Щ_Ё_Ж_Ч_Ш_Э_Ю_Я_Ё_Ю_Я_Щ_Ё_Ж_Ч_Ш_Э_Ю_Я_Ё_Ю_Я_А_Б_В_Г_Д_Е_З_И_Й_К_Л_М_Н_О_П_Р_С_Т_У_Ф_Х_Ц_
Ъ_Ы_Ь_Х_Щ_Я_щ_ё_ж_ч_ш_э_ю_я_ё_я_а_б_в_г_д_е_з_и_й_к_л_м_н_о_п_р_с_т_у_ф_х_ц_ъ_ы_ь_х_щ_я').split('_');
var rus2 = (& #39;Щ_Ё_Ж_Ч_Ш_Э_Ю_Я_А_Б_В_Г_Д_Е_З_И_Й_К_Л_М_Н_О_П_Р_С_Т_У_Ф_Х_Ц_Ъ_Ы_Ь_щ_ё_ж_ч_ш_э_ю_я_а_б_в_г_д_е_з_
и_й_к_л_м_н_о_п_р_с_т_у_ф_х_ц_ъ_ы_ь').split('_');
var lat2 = ('SHH_JO_ZH_CH_SH_JE_JU_JA_A_B_V_G_D_E_Z_I_J_K_L_M_N_O_P_R_S_T_U_F_H_C_##_Y_\'\'_shh_jo_zh_ch_sh_je_ju_ja_a_b_v_g_d_e_z_i_j_k_l_m_n_o_p_r_s_t_u_f_h_c_#_y_\'').split('_');

var translitown=0;
var processhtmltags = 1; // switch to latin when the html tag <...> is typed in
var processbbcodetags = 1; // switch to latin when the bbcode tag [...] is typed in
var language = 0;
var maxtransliterationlength=3;
var lenreafontsize = 14; // WAENING: the value is defined in the main.css !!!
var textreafontwidth = 7; // The width of the text is supposed to be 7 !!!

var prelanguage = 0;

function translatesymboltocyrillic(txt)
{
for (var ii=0; ii<lat.length; ii++)
{
 pos = txt.length>lat[ii].length?(txt.length-lat[ii].length):0;
 if (lat[ii]==txt.substr(pos,txt.length-pos)) {
  return txt.substr(0,txt.length-lat[ii].length)+rus[ii];
 }
}
return txt;
}
function translatesymboltolatin(symb)
{
for (var ii=0;ii<rus2.length;ii++)
{
 if (rus2[ii]==symb)
 return lat2[ii];
}
return symb;
}

function translateAlltoCyrillic()
{
var inloop=1;
tt = window.document.text.sms;
p1 = tt.selectionStart; p2 = tt.selectionEnd;
var preval = ""; var postval="";
if (p1==p2) {txt = tt.value;}
else
{
 preval = tt.value.substring(0, p1);
 txt = tt.value.substring(p1,p2);
 postval = tt.value.substring(p2);
}
var txtnew = "";
if ((!processhtmltags)&&(!processbbcodetags))
{
 txtnew = translateStringtoCyrillic(txt);
}
else
{
 var htt1,pbb1,t1,t2,txt1,txt2,tag_open,tag_close;
 var noinputtag=0;
 if (processhtmltags) {tag_open="<";tag_close=">";}
 if (processbbcodetags) {tag_open="[";tag_close="]";}
 while(inloop)
 {
  if (processhtmltags&&processbbcodetags)
  {
   htt1 = txt.indexOf("<");
   pbb1 = txt.indexOf("[");
   if (pbb1==htt1) {noinputtag=1}
   if (pbb1==-1) {pbb1=txt.length;}
   if (htt1==-1) {htt1=txt.length;}  
   if (htt1<pbb1) {t1=htt1; tag_close=">";} else {t1=pbb1; tag_close="]";}
  }
  else
  {
   t1 = txt.indexOf(tag_open);
   if (t1==-1) noinputtag=1;
  }
  if (noinputtag) {inloop=0;t1=txt.length;t2=txt.length;}
  else
  {
   txt2=txt.substring(t1,txt.length);
   t2=txt2.indexOf(tag_close);
   //if (t2==-1) {t2=txt.length; inloop=0;} else {t2=t2+t1+1};
   if (t2==-1) {t2=t1+1} else {t2=t2+t1+1};
  }
  txt1 = txt.substring(0,t1);
  txt2 = txt.substring(t1,t2);
  txt = txt.substring(t2,txt.length);
  txtnew = txtnew+translateStringtoCyrillic(txt1)+txt2;  
 }
}
tt.value = preval+txtnew+postval;
if (p1!=p2) {tt.setSelectionRange(p1+txtnew.length,p1+txtnew.length);}
tt.focus();
return true;
}
function translateStringtoCyrillic(thestringlat)
{
var symbb,fromm,howmuch,thestringcyr="";
for (kk=0;kk<thestringlat.length;kk++)
{
 howmuch = thestringcyr.length>maxtransliterationlength?maxtransliterationlength:thestringcyr.length;
 fromm = thestringcyr.length-howmuch;
 symbbb = thestringlat.substr(kk,1);
 symbbb = translatesymboltocyrillic(thestringcyr.substr(fromm,howmuch)+symbbb);
 thestringcyr = thestringcyr.substr(0,fromm)+symbbb;  
}
return thestringcyr;
}
function translateAlltoLatin()
{
tt = window.document.text.sms;
p1 = tt.selectionStart; p2 = tt.selectionEnd;
var preval = ""; var postval="";
if (p1==p2) {txt = tt.value;}
else
{
 preval = tt.value.substring(0, p1);
 txt = tt.value.substring(p1,p2);
 postval = tt.value.substring(p2);
}
txtnew="";
var symb = "";
for (kk=0;kk<txt.length;kk++)
{
 symb = translatesymboltolatin(txt.substr(kk,1));
 txtnew = txtnew.substr(0,txtnew.length) + symb;
}
tt.value = preval+txtnew+postval;
if (p1!=p2) {tt.setSelectionRange(p1+txtnew.length,p1+txtnew.length);}
tt.focus();
return true;
}

//-->
</script>
</head>
<body link="#000000" alink="#000000" vlink="#000000">

<!-- FORM -->
<center>
<table width="100%">
<td align="center" width="100%" bgcolor="#cccccc"><center>Бесплатная отправка SMS сообщений</center></td>
</table>
<table border=0 width=90%>
<tr>
<td width=50%>
<body onload="checkLen()">
<FORM ACTION="send.php" METHOD=POST name="text">
<TABLE BORDER=0>
<TR>
<TD>Номер телефона:</TD>
<TD><input type=text name="phone" size=18 maxlength=12></TD></TR>
<TR>
<TD>Выбор оператора:</TD>
<TD><select name="operator" size=1>
<option value="1" >operator 1</option>
<option value="2" >operator 2</option>
<option value="3" >operator 3</option>
</TD></TR>
<TR>
<td colspan="2">Отправить сообщение на русском?</td>
</tr>
<tr>
<td colspan="2"><input type=radio value=1 onClick=setLen(this.value) name="dcs">Да
<input type=radio value=0 onClick=setLen(this.value) name="dcs" checked>Нет</td>
</TR>
<TR>
<TD colspan=2>
Сообщение: 
<textarea name="sms" cols=40 rows=5 onChange=checkLen() onKeyUp=checkLen()></textarea></TD>
<td valign="middle"><p> </p><!-- <input name=len type=hidden onChange=checkLen(document.forms[0]) onKeyUp=checkLen(document.forms[0]) value=0> --><font size="-2">осталось <INPUT TYPE="text" NAME="len" VALUE="160" SIZE=4 onChange="checkLen()" onKeyUp="checkLen()" tabindex="-1">символов</td>
</TR>
<tr>
<td align="center" colspan="2">
<input onclick="translateAlltoCyrillic();doChange();" type="button" value="в кириллицу" class="subbutton" title="Перевести текст в кириллицу">
<input onclick="translateAlltoLatin();doChange()" type="button" value="в латиницу" class="subbutton" title="Перевести текст в латиницу">
</td>
</tr>
<TR>
<TD colspan=2 align=center><input type=submit value="Отправить">
<!-- <input type="button" value="2RUS" class="subbutton" onclick="alert(translit2win(sms_text.value));">
<input type="button" value="2LAT" class="subbutton" onclick="alert(translit2lat(sms_text.value));"> -->
<input type=reset value="Очистить"></TD></TR>
</TABLE></FORM>
</td>
</tr></table></center>
<!-- End FORM -->
</body>
</html>
P.S.: за помощь в создании скрипта выражаю огромную благодарность Strelk'у и SiRex'у с grudina.info .
 
ну тока имеется маленькая проблема скрипт не работает если а оператор не предоставляет email, которого передаются смс на телефон
 
эх, блин, кидалово :-( через емаил-гейт-вей у нас давно уже не работают смс :) :bang:
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх