|
|
|
| Добрый день, я новичек в PHP
Я делаю преобрзование кодировки из одной в другую при отправке письма по почте. Почта работает нормально, текст читабелен, но на странице, которая сообщает о успешном выполнении отправки письма содержится строка и я не знаю в чем дело и как решить даннную проблему.
Буду рад, если кто поможет, желательно подробнее...
Вот сообщение:
Notice: Use of undefined constant w - assumed 'w' in D:\wwwrootiis\Lancom_video\email.php on line 20
Notice: Use of undefined constant k - assumed 'k' in D:\wwwrootiis\Lancom_video\email.php on line 20
Вот строка кода:
$msg_admin = convert_cyr_string ($msg_admin,w,k);
| |
|
|
|
|
|
|
|
для: MacVit
(05.08.2004 в 12:26)
| | Все оч просто, буковки возьми в кавычки, примерно вот так:
$msg_admin = convert_cyr_string ($msg_admin,'w','k'); | |
|
|
|
|
|
|
|
для: bonis
(05.08.2004 в 12:47)
| | УРА!!! ЗАРАБОТАЛО!!! Большое спасибо! | |
|
|
|
|
|
|
|
для: MacVit
(05.08.2004 в 13:05)
| | а как определить в какой кодировки написан какой-либо текст?? | |
|
|
|
|
|
|
|
для: Crux
(12.01.2005 в 22:37)
| | Это достаточно проблематично... обычно это делается на глазок или из каких-то предпосылок, эту информацию можно извлечь из HTTP-заголовков - в общем методы решения задачи определяются конекстом. | |
|
|
|
|
|
|
|
для: cheops
(12.01.2005 в 23:09)
| | HTTP-заголовки здесь не играют ни какой роли
на глазок... это конечно хорошо (так оно в данном случае и делается), но тоже не пойдёт
попробую объяснить свою проблему
я тут мучаюсь с почтой, а точнее с получением информацией с разных почтовых ящиков, само по себе всё уже работает, но есть вот такая вот загвоздочка, т.к. электронная почта была создана очень давно, она не имет понятие о существования русского языка (энто я кажется вычитал из вашей книжки) и здесь начинаются проблемы...
выдёргивая информацию из почтовых заголовок можно получить довольно таки интересны текст, например тема письма может выглядеть так:
=?KOI8-R?Q?=EE=EF=F7=EF=E5_=F7_=F0=EF=FE=F4=EF=F7=EF=EA?= =?KOI8-R?Q?_=F3=EC=F5=F6=E2=E5_=EE=E7=F3_?=
=?windows-1251?B?z/Du9/Ll7e46IHRlc3Rpbmc=?=
чЩУЛПТЛП нБЛУЙНaspid02@ngs.ru>
|
впринципе здесь нет чего-либо страшного...
так как я не нашел такой функции в PHP чтоб это всё спокойно перекодировалось в человеческий вид, я написал свой небольшой кодик
<?
$subject="=?KOI8-R?Q?=EE=EF=F7=EF=E5_=F7_=F0=EF=FE=F4=EF=F7=EF=EA?= =?KOI8-R?Q?_=F3=EC=F5=F6=E2=E5_=EE=E7=F3?=";
print "sub=".conv($subject);
function conv($subject)
{
$s_sub=convert_cyr_string($subject,"k","w");;
$koi="=?koi8-r?B?";
$win="=?WINDOWS-1251?Q?";
$koi2="=?KOI8-R?Q?";
$win2="=?windows-1251?B?";
if (strstr($subject,$win2))
{
$s_sub = substr($subject,strlen($win2));
$s_sub = base64_decode ($s_sub);
}
if (strstr($subject,$koi))
{
$s_sub = substr($subject,strlen($koi));
$s_sub = base64_decode ($s_sub);
$s_sub = convert_cyr_string ($s_sub,"k","w");
}
if (strstr($subject,$win) || stristr($subject,$koi2))
{
if (stristr($subject,$koi2)) $str2=$koi2;
if (strstr($subject,$win)) $str2=$win;
$string=explode($str2,$subject);
$st=$string[0];
for ($ll=0; $ll<count($string); $ll++)
{
$s=explode("=",$string[$ll]);
if (count($s)!=1)
{
for ($qq=0; $qq<count($s); $qq++)
{
$st.=chr(hexdec($s[$qq]));
if (strstr($s[$qq],"_"))
{
$st.=substr($s[$qq],2,strlen($s[$qq])-3);
$st.=" ";
}
elseif (count($s)-2!=$qq) $st.=substr($s[$qq],2,strlen($s[$qq])-2);
else $st.=substr($s[$qq],2,strlen($s[$qq])-3);
}
}
}
$s_sub=$st;
// if (stristr($subject,$koi2)) $s_sub=convert_cyr_string ($s_sub,"k","w");
}
return $s_sub;
}
?>
|
если кто не поленится и выполнит у себя выше представленное, то в браузере увидет такой вот результат
sub= опчпе ч рпюфпчпк умхцве озу
если же разремировать строчку
// if (stristr($subject,$koi2)) $s_sub=convert_cyr_string ($s_sub,"k","w");
|
,то должно по идеи вывести
sub= НОВОЕ В ПОЧТОВОЙ СЛУЖБЕ НГС
, но выводит только sub=
вот одна из самых больных проблем, которая последнее несколько дней сводит меня с ума, если кто-нибудь сможет помочь, я клятвенно клянусь, что тому человеку скажу БОЛЬШОЕ спасибо. | |
|
|
|
|
|
|
|
для: Crux
(13.01.2005 в 00:13)
| | Но ведь можно указывать в почтовых заголовка кодировку письма - пущай ретронсляторы данные в 7-битной кодировки шлют - пользовательский почтовый агент штука умная и не в 70-е делалась... она разберётся если ей указать кодировку...
http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=1339 | |
|
|
|
|
|
|
|
для: Crux
(13.01.2005 в 00:13)
| | Видимо после перекодировок при выполнении блока кода в условии
if (strstr($subject,$win) || stristr($subject,$koi2))
…..
|
В тексте не остается кириллических символов. Вы же там как раз с кодами символов "играете".
И функция convert_cyr_string() все символы, которые не относятся к кириллице просто удаляет. | |
|
|
|
|
|
|
|
для: glsv (Дизайнер)
(13.01.2005 в 01:44)
| | Нет, я не совсем был прав.
Функция convert_cyr_string() спотыкается о самый первый символ в строке $s_sub. Там идет символ с кодом 0. Что вообще говоря означает "конец строки". И потому поведение функции вполне закономерно.
Как только convert_cyr_string() встречает такой символ перекодировка прекращается.
Измените остаток кода следующим образом:
<?
$s_sub = substr($s_sub, 1);
if (stristr($subject,$koi2))
{
$s_sub=convert_cyr_string($s_sub,"k","w");
}
}
header('Content-type: text/html; charset=windows-1251');
return $s_sub;
}
?>
|
У меня это выводит
Я посмотрел по кодам символов. После кода буквы Й опять идет символ с кодом 0.
Вам нужно проверить блок перекодировки и поставить проверку на наличие таких символов. | |
|
|
|
|
|
|
|
для: glsv (Дизайнер)
(13.01.2005 в 02:20)
| | как и обещал, Дизайнеру БОЛЬШОЕ СПАСИБО. | |
|
|
|
|
|
|
|
для: Crux
(13.01.2005 в 14:15)
| | нашел функцию котороя занимается данной перекодировекой
iconv_mime_encode()
вот только она работать будет начиная с 5-ой версии PHP
и ещё должен быть подключен модуль php_iconv.dll | |
|
|
|
|
|
|
|
для: MacVit
(05.08.2004 в 12:26)
| | >Notice: Use of undefined...
Notice - это советы по кодирование. Их вывод следует отключить. Они также отключены на всех хостингах.
В файле php.ini поставьте следующее значение директивы error_reporting
error_reporting = E_ALL & ~E_NOTICE
|
| |
|
|
|