Что делать, если стандартная функция php mail() отправляет письма в неверной кодировке.
На самом деле она отправляет что дают и совершенно ничего не проверяет. Что же делать?
Немного теории:
Тело письма может быть текстом в любой кодировке. Немного сложнее дело обстоит с составляющими заголовка письма (Subject, From, To), они по стандарту должны быть в US-ASCII. Использование в заголовках кодированного текста регламентируется стандартом RFC-2047. Стандарт задает две возможные формы кодирования - BASE64 и Quoted-Printable. BASE64 более универсальна и работает в том числе для кодировки UTF-8, поэтому мы будем использовать именно эту форму. MIME-совместимый почтовый клиент обязан уметь читать обе формы.
И практика:
Ниже приведен пример простой функции, которая отправляет в требуемой кодировке MIME-совместимые письма на русском языке в виде простого текста или в формате HTML
(далее…)
Ниже описаны способы сделать редирект (перенаправление) для каждого варианта.
Редирект PHP
|
<?php header("Location: http://google.ru"); ?> |
Не забывать: До заголовка не должно выводиться никаких!!! символов.
Частая проблема - пробел перед
<?php в начале файла
Следующий код работать не будет и даст варнинг:
|
<?php echo 'Редиректа не будет!'; header("Location: http://google.ru"); ?> |
Редирект HTML
|
<meta http-equiv="refresh" content="0; url=http://google.ru"></meta> |
- content - значение указывает количество секунд до переадресации на адрес, указанный в поле url
- url - адрес для редиректа. Туда и перенаправляем.
Редирект JavaScript
|
window.location="http://google.ru"; |
без комментариев... ))
В продолжении - Редирект в .htaccess
(далее…)
Если надо просто выгрузить некую таблицу с сайта как файл excel, то подойдет достаточно простой способ.
Основная идея - excel уже давно умеет сохранять свои документы как html. Ну и самое простое решение - сохраняем любой документ именно так, открываем в текстовом редакторе, смотрим что и как там написано, пытаемся воспроизвести.
Рассмотрим самый банальный пример: (запрос к базе данных не рассматривается... только та часть, которая выгрузит файл, понятный excel'ю.
1. Формируем заголовок:
|
/* // раскомментируйте строки ниже, если файл не будет загружаться header("Content-Type: application/force-download"); header("Content-Type: application/octet-stream"); header("Content-Type: application/download"); */ //стандартный заголовок, которого обычно хватает header('Content-Type: application/vnd.ms-excel; charset=utf-8'); header("Content-Disposition: attachment;filename=".date("d-m-Y")."-export.xls"); header("Content-Transfer-Encoding: binary "); |
2. Теперь можно выводить ранее полученные данные, из MySQL, из файла, еще откуда - не важно. все на ваше усмотрения. Главное НЕ забыть сформировать стандартную HTML шапку под правильную кодировку (например utf-8) что бы в excel корректно отображалась кириллица. И не забываем про то, что кодировка файла скрипта также должна быть такой же.
|
echo ' <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <meta name="author" content="zabey" /> <title>Demo</title> </head> <body> '; |
3. И вот формирование самой таблицы, которая откроется в Excel
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
// заголовок таблицы echo ' <table border="1"> <tr> <th>Колонка 1</th> <th>Вторая колонка</th> </tr> '; while($row = $STH->fetch()){ // формирование тела таблицы. Выберете ваш метод самостоятельно. echo '<tr> <td>'.$row['col1'].'</td> <td>'.$row['col2'].'</td> </tr>'; } echo '</table>'; echo '</body></html>'; // не забываем закрывать таблицу, боди и сам хтмл документ |
Код одним блоком внутри (далее).
(далее…)
Если надо определить автоматически какой язык использовать на многоязычном сайте, то можно посмотреть заголовок, который передаст браузер. Конкретнее:
$_SERVER['HTTP_ACCEPT_LANGUAGE']
в моем случае - ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4
ну и можно вытащить наиболее предпочтительную локаль:
$temp = explode(',',$_SERVER['HTTP_ACCEPT_LANGUAGE']);
echo $temp[0];
будет - ru-RU
Свежие комментарии