Как перекодировать символ в UCS2 из Windows-1251
Я хочу сделать чтобы сообщения отправлялись на мобильные телефоны через форму отправки с сайта на мобильные телефоны в русской кодировке.
Как я узнал, для кодирования требуется UCS2 (Unicode). Символы кириллицы находятся в диапазоне 0400 - 04FF.
Я не могу вывести код символа 0411 или любого другого больше 255 с помощью функции chr().
Может быть есть ещё функции кодирования (перекодирования) текста из windows-1251 в Unicode???
Адрес скрипта http://eliteMOBILE.net/sms.php
Помогите, плиз!
411 записывается так:
$string="";
$lowbyte=$code&0xFF;
$hibyte=($code>>8)&0xFF;
$string=chr($hibyte).chr($lowbyte);
Конечно. Один символ - один байт. Один байт - 0-255.
411 записывается так:
$string="";
$lowbyte=$code&0xFF;
$hibyte=($code>>8)&0xFF;
$string=chr($hibyte).chr($lowbyte);
Да, вроде правильно. Однако объединить два байта почему-то не удаётся. К примеру в виндовс ИЕ выдаёт 2 байта, один из которых неизвестный символ квадратик, а другой -0 символ "я".
Я сейчас на мобилке попробую, написал такой скриптик
[SIZE=1]
<?
setlocale(LC_ALL, "ru_RU.koi8-r");
Header("Content-Type: text/html; charset=koi8-r");
$f = fopen("test.txt", "w+");
$to = "мой @ mail телефона";
$headers="Content-Type: text/plain; charset=\"koi8-r\"\n"; // кодировка
$headers.="Content-Transfer-Encoding: 8bit";
$code = base_convert("04FF", 16, 10);
$string="";
$allstr="";
$p = 0;
for($i=1; $i<=$code; $i++)
{
$lowbyte=$code&0xFF;
$hibyte=($code>>8)&0xFF;
$string=chr($hibyte).chr($lowbyte);
$allstr .= $string;
if(is_integer($i/70))
{
$p++;
$all = $p." ".$allstr;
//$all = convert_cyr_string($all, "windows-1251", "koi8-r");
mail($to, $p, $allstr, $headers);
// fwrite($f, "$allstr"); // данные введены
echo $all."
";
$string = "";
$allstr = "";
}
$lowbyte="";
$hibyte="";
$string="";
}
echo "
Выполнено!";
?>
[/SIZE]
Однако на телефон приходят только символы "еа" с чёрточками сверху.... я зациклил прогу, подставлял в неё все коды от 1 до 1200 однако все символы получились одинаковые!
Кстати, сделаю вам комплемент: у вас очент хороший, удобный и порядочный форум! Хотел бы и я тако форум...
Пожалуйста, помогите!
Однако символы присылаются не как один, а как два отдельных!
"А"=>"А",
"Б"=>"Б",
"В"=>"В",
"Г"=>"Г",
"Д"=>"Д",
"Е"=>"Е",
"Ж"=>"Ж",
"З"=>"З",
"И"=>"И",
"Й"=>"Й",
"К"=>"К",
"Л"=>"Л",
"М"=>"М",
"Н"=>"Н",
"О"=>"О",
"П"=>"П",
"Р"=>"Р",
"С"=>"С",
"Т"=>"Т",
"У"=>"У",
"Ф"=>"Ф",
"Х"=>"Х",
"Ц"=>"Ц",
"Ч"=>"Ч",
"Ш"=>"Ш",
"Щ"=>"Щ",
"Ъ"=>"Ъ",
"Ы"=>"Ы",
"Ь"=>"Ь",
"Э"=>"Э",
"Ю"=>"Ю",
"Я"=>"Я",
"а"=>"а",
"б"=>"б",
"в"=>"в",
"г"=>"г",
"д"=>"д",
"е"=>"е",
"ж"=>"ж",
"з"=>"з",
"и"=>"и",
"й"=>"й",
"к"=>"к",
"л"=>"л",
"м"=>"м",
"н"=>"н",
"о"=>"о",
"п"=>"п",
"р"=>"р",
"с"=>"с",
"т"=>"т",
"у"=>"у",
"ф"=>"ф",
"х"=>"х",
"ц"=>"ц",
"ч"=>"ч",
"ш"=>"ш",
"щ"=>"щ",
"ъ"=>"ъ",
"ы"=>"ы",
"ь"=>"ь",
"э"=>"э",
"ю"=>"ю",
"я"=>"я",
);
function conv($d) {
GLOBAL $convert;
$d=strtr($d,$convert);
return($d);
}
Так, кстати, сделано на wap.rbc.ru, wap.mts.ru
Просто те символы, который ОС видит как русские, в мобилке это каракули (типа а с чёрточкой и т.д.). Для этого нужно перевести днобайтовый символ русского языка в 2-х байтовый символ UCS2. Я у преподавателей своих спрашивал, они этого не знают. Единственное что я нашел, так это функция перевода в Unicode для С++. Её название wchar_t() - возвращает вроде строку Юникода!
Помогите, прошу!
А так же когда я посылаю письмо функцией mail() то в пришедшем мне смс-сообщении содержися строка-идентификатор моего сервера. Как её убрать или изменить? Строка типа хост@сервер.ком.юа
Спсибо за столь быстрые ответы!
±¶ё - типа того....
в описании функции mail() четвертый параметр - additional headers. так вот если его посатвить "FROM: [email]user@server.com.ua[/email]" то вроде бы все будет :)
в описании функции mail() четвертый параметр - additional headers. так вот если его посатвить "FROM: [email]user@server.com.ua[/email]" то вроде бы все будет :)
Как это. Я прикрепляю Headerы такого содержания:
$headers="Content-Type: text/plain; charset=\"koi8-r\"\n"; // кодировка
$headers.="Content-Transfer-Encoding: 8bit";
А функция отправки такая:
mail($to, "", $string, $headers);
А что вы имеете ввиду? Прилепить адрес кому отправляю???
$headers.="Content-Transfer-Encoding: 8bit";
$headers.="From: [email]myemail@codenet.ru[/email]";
$headers.="Content-Transfer-Encoding: 8bit";
$headers.="From: [email]myemail@codenet.ru[/email]";
Получается такая картинка.
1. При отсылке на мобильный телефон e-mail сообщения через функцию mail() на телефон приходят различные значки, символы английского алфавита - но не руские символы!
2. Функция mail($to, "", $str, $headers);
где:
$headers.="Content-Transfer-Encoding: 8bit";
$headers.="From: [email]myemail@codenet.ru[/email]";
$to = "380679826105@2sms.kyivstar.net";
$str = "..."; // 1.прочитанные из текстового файла символы unicode
// 2.или символы, которые перекодированные вашей функцией объединяющей
// два символа в один
// 3.или подставляемые функцией chr(1041); где 1041 - код 0411 - х16
К общем, в любом случае на телефон приходят символы по отдельности (не 2 байта, а по одному байту на каждый символ). Присылается строка типа: $Mu&'--
Т.е. видать один только символ распознаётся...
Прочтите о UCS2 ("Структура SMS | UCS2 (UNICODE) | Cпецификации GSM фаза 2+") на http://www.xprogramming.ru/wiki/ow.asp?p=%CF%F0%EE%E5%EA%F2SMS_%D1%F2%F0%F3%EA%F2%F3%F0%E0Sms&a=print
Из этой статьи вроде становится ястно что кодируется 1 символ???
В общем, у меня при отправке SMS-сообщения на мобильный при перекодировании сообщения из кодировки windows-1251 в кодировку koi8 у меня получается пнеплохая картинка!
Я получаю по SMS сообщение транслитом, типа "Privet! Kak dela? SMS - super!".
Из этого я сделал вывод, что на сервер нужно посылать какую-то дополнительную информацию, которая говорит что кодировать в транслит не нужно, мол телефон и сам поймет эти русские символы.
Пожалуйста,Ю помогите мне!
Я видел, что некоторые сайты позволяют отправлять SMS без заголовка сервера "X-mailer:" (как это?) и к тому же русские сообщения.
А можно ли с вашим прелестным сайтом обмениватся ссылками? Даже не ссылками, а кнопочками. Мне ваш проект очень-очень нравится, нужно людям о нём рассказать! Если вам будет интересен мой проект http://eliteMOBILE.net чтобы обмениватся кнопочками на всех страницах, то это для меня будет честь! Ну, а если нет, то я понимаю что мой проект ещё не набрал больших оборотов... будем развиватся...
СПАСИБО ВАМ БОЛЬШОЕ за столь быстрые ответы! Вы очень хороший админ! СПАСИБО!!!
$convert=Array(
"А"=>"А",
"Б"=>"Б",
"В"=>"В",
"Г"=>"Г",
"Д"=>"Д",
"Е"=>"Е",
"Ж"=>"Ж",
"З"=>"З",
"И"=>"И",
"Й"=>"Й",
"К"=>"К",
"Л"=>"Л",
"М"=>"М",
"Н"=>"Н",
"О"=>"О",
"П"=>"П",
"Р"=>"Р",
"С"=>"С",
"Т"=>"Т",
"У"=>"У",
"Ф"=>"Ф",
"Х"=>"Х",
"Ц"=>"Ц",
"Ч"=>"Ч",
"Ш"=>"Ш",
"Щ"=>"Щ",
"Ъ"=>"Ъ",
"Ы"=>"Ы",
"Ь"=>"Ь",
"Э"=>"Э",
"Ю"=>"Ю",
"Я"=>"Я",
"а"=>"а",
"б"=>"б",
"в"=>"в",
"г"=>"г",
"д"=>"д",
"е"=>"е",
"ж"=>"ж",
"з"=>"з",
"и"=>"и",
"й"=>"й",
"к"=>"к",
"л"=>"л",
"м"=>"м",
"н"=>"н",
"о"=>"о",
"п"=>"п",
"р"=>"р",
"с"=>"с",
"т"=>"т",
"у"=>"у",
"ф"=>"ф",
"х"=>"х",
"ц"=>"ц",
"ч"=>"ч",
"ш"=>"ш",
"щ"=>"щ",
"ъ"=>"ъ",
"ы"=>"ы",
"ь"=>"ь",
"э"=>"э",
"ю"=>"ю",
"я"=>"я",
);
function conv($d) {
GLOBAL $convert;
$d=strtr($d,$convert);
return($d);
}
echo conv("Привет всем!!! Rezultat");
?>
Может и я стал полезен... :)
Может нужно в письме указывать не 8 а 16 бит кодировку????