Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Контроль принятия HTTP-заголовка...
 
 автор: Sfinks   (26.12.2006 в 01:11)   письмо автору
 
 

Доброй ночи!

У меня возникла задача, определить понимает юзер-агент пользователя WAP 2.0 или нет.
В вап 2.0 агенту отправляется заголовок:
<?php header("Content-Type: application/vnd.wap.xhtml+xml; charset=utf-8"); ?>
А в вап 1.1:
<?php header("Content-Type: text/vnd.wap.wml; charset=utf-8"); ?>

Вот как мне (скрипту) узнать, принял ли агент заголовок вап 2.0 и, если не принял, отправить заголовок вап 1.1?

Надеюсь это возможно???

   
 
 автор: cheops   (26.12.2006 в 01:30)   письмо автору
 
   для: Sfinks   (26.12.2006 в 01:11)
 

Вообще порядочный клиент вам сам должен присылать HTTP-заголовки с его предпочтениями, ложиться они должны в переменную окружения $_SERVER['HTTP_ACCEPT'], правда мобильные устройства в порядочности трудно заподозрить :)))

   
 
 автор: Sfinks   (26.12.2006 в 02:01)   письмо автору
 
   для: cheops   (26.12.2006 в 01:30)
 

А значение */* означает что принимает любые? Но ИЕ, например, text/vnd.wap.wml не принимает, а пишет */*
Или то, что он страницу с таким заголовком сохраняет в файл, но не отображает, считается положительным результатом?

   
 
 автор: cheops   (26.12.2006 в 02:27)   письмо автору
 
   для: Sfinks   (26.12.2006 в 02:01)
 

Это означает, что браузер на свой страх и риск будет есть всё, чем вы его накормите, если он что-то не понимает, он просто отобразит его как текст text/plain.

   
 
 автор: Sfinks   (26.12.2006 в 06:39)   письмо автору
 
   для: cheops   (26.12.2006 в 02:27)
 

А все-таки именно принял или не принял (по факту) нельзя определить? Вот на http://www.developershome.com/wap/xhtmlmp/xhtml_mp_tutorial.asp?page=mimeTypesFileExtension написано следующее:
The following example demonstrates how to use JSP to write the code. If you use a server-side technology other than JSP, the code will be slightly different but the idea is the same.

<%
String acceptHeader = request.getHeader("accept");

if (acceptHeader.indexOf("application/vnd.wap.xhtml+xml") != -1)
  response.setContentType("application/vnd.wap.xhtml+xml");
else if (acceptHeader.indexOf("application/xhtml+xml") != -1)
  response.setContentType("application/xhtml+xml");
else
  response.setContentType("text/html");
%>

Как сделать тоже самое на PHP? Я прост не шарю в JSP =(
Или этот код на $_SERVER["HTTP_ACCEPT"] и основан?

   
 
 автор: cheops   (26.12.2006 в 13:21)   письмо автору
 
   для: Sfinks   (26.12.2006 в 06:39)
 

Судя по всему да, вам просто нужно проверить содержит ли строка $_SERVER["HTTP_ACCEPT"], подстроку "application/vnd.wap.xhtml+xml" или подстроку "application/xhtml+xml", если не то и не другое не прокатывает, то считается, что браузер поддерживает формат "text/html".

   
 
 автор: Unkind   (26.12.2006 в 13:40)   письмо автору
 
   для: Sfinks   (26.12.2006 в 06:39)
 

Cтранно, почему else "text/html", логичнее было бы сделать "text/vnd.wap.wml":


<?php
$accept 
$_SERVER['HTTP_ACCEPT'];
if(
strpos($accept"application/vnd.wap.xhtml+xml") !== false$type "application/vnd.wap.xhtml+xml";
elseif(
strpos($accept"application/xhtml+xml") !== false$type "application/xhtml+xml";
elseif(
strpos($accept"text/html") !== false$type "text/html";
else 
$type "text/vnd.wap.wml";

header("Content-type: ".$type."; charset=utf-8");

if(
$type == "text/vnd.wap.wml")
{
//WML-страница
}
else
{
//XHTML/HTML
}
?>

   
 
 автор: Sfinks   (26.12.2006 в 21:44)   письмо автору
 
   для: Unkind   (26.12.2006 в 13:40)
 

> Cтранно, почему else "text/html", логичнее было бы сделать "text/vnd.wap.wml":
Потому что статья о форматах WAP 2.0, а не о wap2 против wap1... Т.е. Все 3 заголовка, упомянутые в этом примере - это варианты для wap 2.0 =)

   
 
 автор: sfinks   (01.01.2007 в 20:06)   письмо автору
 
   для: cheops   (26.12.2006 в 01:30)
 

> правда мобильные устройства в порядочности трудно заподозрить :)))
А поисковых ботов можно в порядочности заподозрить?
Вот при таком определении:
<?php
  $accept 
$_SERVER["HTTP_ACCEPT"];
  if((
strpos($accept,"application/vnd.wap.xhtml+xml") !== false) ||
     (
strpos($accept,"application/xhtml+xml")         !== false) ||
     (
strpos($accept,"text/html")                     !== false) ||
     (
strpos($accept,"*/*")                           !== false))   $_GET["type"] = "xhtml";
  else 
$_GET["type"] = "wml";
?>
поисковые боты станут индексировать страницу? На скок я знаю вмл они не индексируют =)

   
 
 автор: cheops   (01.01.2007 в 21:05)   письмо автору
 
   для: sfinks   (01.01.2007 в 20:06)
 

Почему бы нет - зайдите на свой сайт при помощи браузера (не Opera) - если он выдаёт какую-либо информацию - всё в порядке, поисковый робот её подцепит.

   
 
 автор: Sfinks   (02.01.2007 в 10:33)   письмо автору
 
   для: cheops   (01.01.2007 в 21:05)
 

Наверно я не правильно сформулировал вопрос. Любой другой браузер хоть как-то представляется. Например ИЕ нормально открывает. Но поисковый робот это же скрипт. А, например, скрипт пхп без особых инструкций вообще не определяет переменную $_SERVER["HTTP_ACCEPT"]. Вот я и имел ввиду, боты хотя бы */* передает или нет?

   
 
 автор: Sfinks   (02.01.2007 в 10:33)   письмо автору
 
   для: cheops   (01.01.2007 в 21:05)
 

Наверно я не правильно сформулировал вопрос. Любой другой браузер хоть как-то представляется. Например ИЕ нормально открывает. Но поисковый робот это же скрипт. А, например, скрипт пхп без особых инструкций вообще не определяет переменную $_SERVER["HTTP_ACCEPT"]. Вот я и имел ввиду, боты хотя бы */* передает или нет?

   
 
 автор: cheops   (02.01.2007 в 13:45)   письмо автору
 
   для: Sfinks   (02.01.2007 в 10:33)
 

>Вот я и имел ввиду, боты хотя бы */* передает или нет?
Лучше на это не рассчитывать, хотя приличные роботы должны следовать этикету протокола HTTP.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования