Сайту требуются администраторы и авторы статей. С предложениями пишите на rock-n-roll@tut.by.
4 декабря 2007

PHP: Перекодирование UTF-8 в Windows-1251

Обычно для перекодирования строк из одной кодировки в другую используют функцию iconv.

$out=iconv("UTF-8", "WINDOWS-1251", $in);

Однако бывает так, что на некоторых хостингах (обычно бесплатных) данная функция отсутствует.

В таком случае можно использовать функцию работающую на массивах:

function utf_to_win($str)
{
$str=strtr($str,array("Р°"=>"а","Р±"=>"б","РІ"=>"в","Рі"=>"г","Рґ"=>"д","Рµ"=>"е","С‘"=>"ё",
"Р¶"=>"ж","Р·"=>"з",
"Рё"=>"и","Р№"=>"й","Рє"=>"к","Р»"=>"л","Рј"=>"м","РЅ"=>"н","Рѕ"=>"о","Рї"=>"п",
"СЂ"=>"р","СЃ"=>"с","С‚"=>"т","Сѓ"=>"у","С„"=>"ф","С…"=>"х","С†"=>"ц",
"С‡"=>"ч","С€"=>"ш","С‰"=>"щ","СЉ"=>"ъ","С‹"=>"ы","СЊ"=>"ь",
"СЌ"=>"э","СЋ"=>"ю","СЏ"=>"я",
"Рђ"=>"А","Р‘"=>"Б","Р’"=>"В","Р“"=>"Г","Р”"=>"Д",
"Р•"=>"Е","РЃ"=>"Ё","Р–"=>"Ж","Р—"=>"З","Р˜"=>"И","Р™"=>"Й","Рљ"=>"К","Р›"=>"Л",
"Рњ"=>"М","Рќ"=>"Н","Рћ"=>"О","Рџ"=>"П","Р "=>"Р",
"РЎ"=>"С","Рў"=>"Т","РЈ"=>"У","Р¤"=>"Ф","РҐ"=>"Х",
"Р¦"=>"Ц","Р§"=>"Ч","РЁ"=>"Ш","Р©"=>"Щ","РЄ"=>"Ъ","Р«"=>"Ы",
"Р¬"=>"Ь","Р­"=>"Э","Р®"=>"Ю","РЇ"=>"Я"));
return $str;
}

Категория Кодировки, PHP | 6 CommentsВерсия для печати Версия для печати

5 ноября 2007

Начало работы с CakePHP по-русски

Скоро товарищей, пишущих по старинке веб-страницы на голом php, можно будет показывать в зоопарках :-)
Наступает эра Фреймворков. И это хорошо, потому что программист избавлен от множества рутинных задач,
и может сосредоточиться на создании логики приложения.
В CakePHP используется подход MCV (Model - View - Controller). Теперь вместо одного файла *.php на одну
страничку их будет целых три минимум %) - один для модели (описывает связь формы с базой данных, имеет
расширение php), thtml файл будет описывать внешний вид страницы (view), третий (контроллер страницы с
расширением php будет реализовывать логику формы и будет содержать методы, дополняющие функциональность
родительского класса AppController.
Что ж, начнем печь приложения как пирожки )) Но для этого придется преступить через себя и принять новый подход к программированию. Оно того стоит ^_^

Далее »

Категория CakePHP, Фреймворки, PHP | 1 CommentВерсия для печати Версия для печати

10 июня 2007

PHP: sprintf

(PHP 3, PHP 4 , PHP 5)

sprintf -- Возвращает отформатированную строку

Описание

string sprintf ( string format [, mixed args])

Возвращает строку, созданную с использованием строки формата format.

Строка формата состоит из директив: обычных символов (за исключением %), которые копируются в результирующую строку, и описатели прреобразований, каждый из которых заменяется на один из параметров. Это относится также к fprintf(), sprintf() и printf().

Каждый описатель прреобразований состоит из знака процента (%), за которым следует один или более дополнительных элементов (в том порядке, в котором они здесь перечислены):

  1. Необязательный описатель заполнения, который определяет, какой символ будет использоваться для дополнения результата до необходимой длины. Это может быть пробел или 0. По умолчанию используется пробел. Альтернативный символ может быть указан с помощью '. См. примеры ниже.
  2. Необязательный описатель выравнивания, определяющий выранивание влево или вправо. По умолчанию выравнивается вправо, - используется для выравнивания влево.
  3. Необязательное число, описатель ширины, определяющий минимальное число символов, которое будет содержать результат этого преобразования.
  4. Необязательный описатель точности, определяющий, сколько десятичных разрядов отображать для чисел с плавающей точкой. Имеет смысл только для числовых данных типа float. (Для форматирования чисел удобно также использовать функцию number_format().)
  5. Описатель типа, определяющий, как трактовать тип данных аргумента. Допустимые типы:
  • % - символ процента. Аргумент не используется.
  • b - аргумент трактуется как целое и выводится в виде двоичного числа.
  • c - аргумент трактуется как целое и выводится в виде символа с соответствующим кодом ASCII.
  • d - аргумент трактуется как целое и выводится в виде десятичного числа со знаком.
  • u - аргумент трактуется как целое и выводится в виде десятичного числа без знака.
  • f - аргумент трактуется как float и выводится в виде десятичного числа с плавающей точкой.
  • o - аргумент трактуется как целое и выводится в виде восьмеричного числа.
  • s - аргумент трактуется как строка.
  • x - аргумент трактуется как целое и выводится в виде шестнадцатиричного числа (в нижнем регистре букв).
  • X - аргумент трактуется как целое и выводится в виде шестнадцатиричного числа (в верхнем регистре букв).

Начиная с PHP 4.0.6 в строке формата поддерживается нумерация и изменение порядка параметров. Например:

Пример 1. Изменение порядка параметров

$format = "There are %d monkeys in the %s";
printf($format, $num, $location);

Этот код выведет "There are 5 monkeys in the tree". Теперь представьте, что строка формата содержится в отдельном файле, который потом будет переведен на другой язык, и мы переписываем ее в таком виде:

Пример 2. Изменение порядка параметров

$format = "The %s contains %d monkeys";
printf($format, $num, $location);

Появляется проблема: порядок описателей преобразования не соответствует порядку аргументов. Мы не хотим менять код, и нам нужно указать, какому аргументу соответствует тот или иной описатель преобразования.

Пример 3. Изменение порядка параметров

$format = "The %2\$s contains %1\$d monkeys";
printf($format, $num, $location);

Нумерация аргументов имеет еще одно применение: она позволят вывести один и тот же аргумент несколько раз без передачи функции дополнительных параметров.

Пример 4. Изменение порядка параметров

$format = "The %2\$s contains %1\$d monkeys.
That's a nice %2\$s full of %1\$d monkeys."
;
printf($format, $num, $location);

См. также описание функций printf(), sscanf(), fscanf(), vsprintf() и number_format().
Пример 5. sprintf(): заполнение нулями

$isodate = sprintf("%04d-%02d-%02d", $year, $month, $day);

Пример 6. sprintf(): форматирование денежных величин

$money1 = 68.75;
$money2 = 54.35;
$money = $money1 + $money2;
// echo $money выведет "123.1";
$formatted = sprintf("%01.2f", $money);
// echo $formatted выведет "123.10"

Категория Функции, PHP | 0 CommentsВерсия для печати Версия для печати

7 июня 2007

Web 3.0 - Менеджеры знаний

Поскольку все рекламные технологии являются «надстройкой» над технологиями коммуникации, первая часть моего доклада будет посвящена общим концепциям. А именно — тем проблемам, которые возникают в современных массовых интернет-сервисах, а также вариантам решения этих проблем.

  Далее »

Категория Web | 0 CommentsВерсия для печати Версия для печати

30 мая 2007

Проверка e-mail на PHP

Приведем функцию на PHP использующую регулярные выражения для проверки корректности e-mail:

function CheckEmail($email)
{

if(eregi('^([a-z0-9_]|\\-|\\.)+'.'@'.'(([a-z0-9_]|\\-)+\\.)+'.'[a-z0-9]{2,4}$', $email)):
{
return true;
};
else:
{
return false;
};endif;
}

Категория PHP | 0 CommentsВерсия для печати Версия для печати

30 мая 2007

Отправка файла по email на PHP

Нижеследующий пример показывает как средствами PHP отправить по e-mail письмо с прикрепленным  нему файлом.

<?
// Функции. Можно вынести в дpугой файл.

class html_mime_mail {
var $headers;
var $multipart;
var $mime;
var $html;
var $parts = array();

function html_mime_mail($headers="") {
$this->headers=$headers;
}

function add_html($html="") {
$this->html.=$html;
}

function build_html($orig_boundary,$kod) {
$this->multipart.="--$orig_boundary\n";
if ($kod=="w" || $kod=="win" || $kod=="windows-1251") $kod="windows-1251";
else $kod="koi8-r";
$this->multipart.="Content-Type: text/html; charset=$kod\n";
$this->multipart.="BCC: del@ipo.spb.ru\n";
$this->multipart.="Content-Transfer-Encoding: Quot-Printed\n\n";
$this->multipart.="$this->html\n\n";
}


function add_attachment($path="", $name = "", $c_type="application/octet-stream") {
if (!file_exists($path.$name)) {
print "File $path.$name dosn't exist.";
return;
}
$fp=fopen($path.$name,"r");
if (!$fp) {
print "File $path.$name coudn't be read.";
return;
}
$file=fread($fp, filesize($path.$name));
fclose($fp);
$this->parts[]=array("body"=>$file, "name"=>$name,"c_type"=>$c_type);
}


function build_part($i) {
$message_part="";
$message_part.="Content-Type: ".$this->parts[$i]["c_type"];
if ($this->parts[$i]["name"]!="")
$message_part.="; name = \"".$this->parts[$i]["name"]."\"\n";
else
$message_part.="\n";
$message_part.="Content-Transfer-Encoding: base64\n";
$message_part.="Content-Disposition: attachment; filename = \"".
$this->parts[$i]["name"]."\"\n\n";
$message_part.=chunk_split(base64_encode($this->parts[$i]["body"]))."\n";
return $message_part;
}


function build_message($kod) {
$boundary="=_".md5(uniqid(time()));
$this->headers.="MIME-Version: 1.0\n";
$this->headers.="Content-Type: multipart/mixed; boundary=\"$boundary\"\n";
$this->multipart="";
$this->multipart.="This is a MIME encoded message.\n\n";
$this->build_html($boundary,$kod);
for ($i=(count($this->parts)-1); $i>=0; $i--)
$this->multipart.="--$boundary\n".$this->build_part($i);
$this->mime = "$this->multipart--$boundary--\n";
}


function send($server, $to, $from, $subject="", $headers="") {

$headers="To: $to\nFrom: $from\nSubject: $subject\nX-Mailer: The Mouse!\n$headers";
$fp = fsockopen($server, 25, &$errno, &$errstr, 30);
if (!$fp)
die("Server $server. Connection failed: $errno, $errstr");
fputs($fp,"HELO $server\n");
fputs($fp,"MAIL FROM: $from\n");
fputs($fp,"RCPT TO: $to\n");
fputs($fp,"DATA\n");
fputs($fp,$this->headers);
if (strlen($headers))
fputs($fp,"$headers\n");
fputs($fp,$this->mime);
fputs($fp,"\n.\nQUIT\n");
while(!feof($fp))
$resp.=fgets($fp,1024);
fclose($fp);
}
}


// *************************************************************************
//
//   В качестве аттача пpисоединяем html-письмо (открывается автоматически).
//   Второй аттач - некоторый файл из каталога.
//   Вот так вызывать все то, что написано выше:
//
// *************************************************************************


$mail=new html_mime_mail();
$mail->add_html("<html><body><center><h2>Пpивет!<br><br>".
"<br>Посылаю файл [/bin/ls] ...".
"</h2></center></body></html>");
$mail->add_attachment("sites.rar","");
$mail->build_message("win"); // если не "win", то кодиpовка koi8
$mail->send("smtp.mail.ru",
"komu@mail.ru",
"ot_kogo@mail.ru",
"Тема письма");

//
// После прихода письма качаем по ФТП оригинальный /bin/ls и сравниваем с
// импортированным из письма:
//
//    X:\temp>fc /b ls ls2
//    Сравнение файлов ls и LS2
//    FC: различия не найдены
//
//
// Внимание! Если у вас нет файла /bin/ls, то просто закомментируйте строку
// $mail->add_attachment("/bin/","ls"), чтобы программа не пыталась присоединить
// к письму неcуществующие файлы.
//

?>

Категория PHP | 0 CommentsВерсия для печати Версия для печати

Друзья

  • Рубрики

  • Разное
  • Прочее