Druzya.org
Возьмемся за руки, Друзья...
 
 
Наши Друзья

Александр Градский
Мемориальный сайт Дольфи. 
				  Светлой памяти детей,
				  погибших  1 июня 2001 года, 
				  а также всем жертвам теракта возле 
				 Тель-Авивского Дельфинариума посвящается...

Библиотека :: Компьютеры и Программирование :: Котеров Д. В. - Самоучитель PHP 4
<<-[Весь Текст]
Страница: из 287
 <<-
 
удно 
// восстанавливать текст из транслита (хотя эта задача и разрешима). 
// Функция полезна и сама по себе, но все-таки чаще всего ее 
// применяют для работы с почтой. Именно поэтому я включаю 
// ее в этот модуль. 
function EncodeString($st,$to,$from=DefaultCode) 
{ // Оставляем только первые буквы названий кодировок 
$from=strtolower(substr($from,0,1)); 
$to =strtolower(substr($to,0,1)); 
// Пытаемся воспользоваться встроенной в PHP функцией 
if($to!="t") return convert_cyr_string($st,$from,$to); 
// Иначе нужно преобразовать строку в Translit, что придется 
// делать "вручную" — при помощи strtr(). 
// Сначала заменяем "односимвольные" фонемы. 
$st=strtr($st,"абвгдеёзийклмнопрстуфхъыэ", 
"abvgdeeziyklmnoprstufh'ie"); 
$st=strtr($st,"АБВГДЕЁЗИЙКЛМНОПРСТУФХЪЫЭ", 
"ABVGDEEZIYKLMNOPRSTUFH'IE"); 
// Затем — "многосимвольные". 
$st=strtr($st,array( 
"ж"=>"zh", "ц"=>"ts", "ч"=>"ch", "ш"=>"sh", 
"щ"=>"shch","ь"=>"", "ю"=>"yu", "я"=>"ya", 
"Ж"=>"ZH", "Ц"=>"TS", "Ч"=>"CH", "Ш"=>"SH", 

Часть V. Приемы программирования на PHP 490 
"Щ"=>"SHCH","Ь"=>"", "Ю"=>"YU", "Я"=>"YA" 
)); 
// Возвращаем результат. 
return $st; 
} 
// Значения параметра Content-tyep charset в зависимости от 
// односимвольного названия кодировки. 
global $CoderCharset; 
$CoderCharset["w"]="windows-1251"; 
$CoderCharset["i"]="iso-8859-5"; 
$CoderCharset["k"]="koi8-r"; 
$CoderCharset["m"]="x-mac-cyrillic"; 
$CoderCharset["t"]="koi8-r"; 
// Разделитель тела и заголовков (таких как From: и т. д.) в письме. 
define("MailDivider","~StartOfMail"); 
// Посылает письмо $msg по заданному адресу $to, перед этим 
// преобразовав его в кодировку $encTo. Проставляет поле 
// charset и правильно обрабатывает имя получателя (если 
// в теле письма уже указано "To: Вася", то в результате 
// получается "To: Вася "). Если работа происходит 
// в Win32, то письмо не посылается, а создается отладочный файл, 
// в котором будет содержаться текст письма. 
// Письмо должно состоять из заголовков и тела, разделенных 
// маркером ~StartOfMail. 
function SendMail($to,$msg,$encTo=DefaultCode,$encFrom=DefaultCode) 
{ global $CoderCharset; 
// Перекодируем 
$msg=EncodeString($msg,$encTo,$encFrom); // тело письма 
$head=""; // заголовки 
// Если есть заголовки, выделяем их. 
if(strpos($msg,MailDivider)!==false) { 
$regs=split(MailDivider."\r?\n?",$msg,2); // тело и заголовки 
$head=trim($regs[0]); 
$msg=$regs[1]; 
} 

Глава 32. Почтовые шаблоны 491 
// Работаем с заголовками. Разбиваем их на строки. 
if($head) $Lines=split("[\r\n]+",$head); else $Lines=array(); 
$HasContType=0; // число найденных заголовков Content-type 
$chs="charset=$CoderCharset[$encTo]"; 
$subject=""; 
for($i=0; $i"; 
$l=""; 
} 
// Проверяем заголовок Subject. В некоторых верcиях PHP 
// передача пустого второго параметра в функцию mail() 
// приводит к нежелательным последствиям. Указывая в заголовке 
// значение Subject из письма, мы решаем проблему. 
if(eregi("^subject:([^\r\n]*)",$l,$regs)) { 
$subject=trim($regs[1]); 
} 
} 
// Нет заголовка Content-type — добавляем его в конец. 
if(!$HasContType) $Lines[]="Content-type: text/plain; $chs"; 
// Соединяем строки опять вместе. 
$head=ereg_Replace("\n\n+","\n",join("\n",$Lines)); 
// Посылаем письмо. 
$Result=@mail($to,$subject,$msg,$head)!=0; 

Часть V. Приемы программирования на PHP 492 
// В Windows параллельно ведем журнал писем (для отладки). 
if(geten
 
<<-[Весь Текст]
Страница: из 287
 <<-