Есть ли способ использовать PHP для определения того, загружается ли страница с использованием IE6?Могу ли я определить IE6 с PHP?
ответ
Попробуйте проверить их агент пользователя для 'MSIE 6.'
,
$using_ie6 = (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE 6.') !== FALSE);
Основано на this user agent information.
Это часто совпадает с Opera, потому что Opera часто добавляет «MSIE 6.0» в свою строку user-agent. – thomasrutter
Недавние версии Opera не имеют (по умолчанию) MSIE 6.0 в строке user-agent – philfreo
В моем случае это ложное положительное значение для всех браузеров MSIE, поскольку все они отображают «совместимый с MSIE 6.0», даже если их версия на самом деле выше. – Christian
Вы можете обнаружить IE6 с HTML таким образом
<!--[if IE 6]>
// ie6 only stuff here
<![endif]-->
Here's a link on how it's done in PHPWay Back Machine, но я видел много ложных срабатываний в разборе $_SERVER["HTTP_USER_AGENT"]
для IE6
+1 лучший ответ. –
Это может быть полезно иногда, но это не так. на самом деле ответ на вопрос. Он спрашивает, как это сделать с PHP. Пользовательский агент может быть IE, но он может не отображаться HTML. – Fuser97381
Вы можете использовать get_browser с updated browscap.ini file.
Это звучит интересно, я попробую. – PHLAK
Вы можете использовать, используя заголовок HTTP-User HTTP, но я настоятельно рекомендую не делать это, если это возможно. Заголовок User-Agent очень трудно разобрать точно и имеет тенденцию к ложным срабатываниям с простым сопоставлением строк - даже игнорируя проблему браузеров, которые притворяются другими браузерами. Например, строка «MSIE 6.» Джереми будет соответствовать IE Mobile, которая очень сильно отличается от IE6, которую вы обычно не хотите связывать с ними.
Плюс, когда вы отправляете разные HTML-файлы в разные браузеры, вы должны использовать заголовок «Vary» (что делает кеши менее эффективными), чтобы избежать кэширования отправки неверных страниц в разные браузеры.
Итак, если вы можете найти другое место для дифференциации браузера, это определенно лучше. Подход Ólafur с условными комментариями обычно является самым простым подходом к изменению ссылок JavaScript и HTML разметки/CSS.
Спасибо, ребята, я в конечном итоге создание следующей функции и вызов ее по мере необходимости:
// IE6 Check
function isIE() {
$userAgent = strtolower($_SERVER['HTTP_USER_AGENT']);
if (ereg("msie 6.0", $userAgent)) {
return true;
} else {
return false;
}
}
Быстрый совет: используйте функции preg в PHP вместо ereg, они быстрее. http://uk.php.net/manual/en/function.preg-match.php – DisgruntledGoat
Поймите, что вы не должны использовать функцию регулярного выражения вообще, если вы проверяете наличие строки. Используйте strpos, как показывает предыдущий ответ. – DisgruntledGoat
Многие на основе агента пользователя ответов на этой странице, не слишком надежны, поскольку Opera часто идентифицирует себя с строка агента пользователя, содержащего «MSIE 6.0», такие как:
Mozilla/4.0 (compatible; MSIE 6.0; X11; Linux i686; en) Opera 9.51
Это влияет на все версии Opera 5 до 9 и даже опера 10 и может быть включен или выключен изнутри оперы. See this page.
Общим подходом, который я видел, является проверка на «MSIE» и «Opera». Например,
if (preg_match('/\bmsie 6/i', $ua) && !preg_match('/\bopera/i', $ua))
echo "We have IE6!";
хорошо PHLAK ...
я думаю, что это один гораздо лучше: P
if(preg_match('/msie [2-6]/i',$_SERVER['HTTP_USER_AGENT'])) {
// if IE<=6
} else {
//if IE>6
}
Отлично работает, кроме «preg» должно быть «preg_match». – kingjeffrey
sry - i ate _match: P – marverix
Синтаксис ''/msie [1-6]/i'' короче и, вероятно, более известен большинству людей. –
Функция preg_match() вместо PREG(), но хорошо!
Примечание. IE8 также указывает, что он совместим с IE6 в своей строке пользовательского агента.
Я обнаружил, что это правда, когда пользователь связался со мной, чтобы сказать, что они используют IE8, но я обнаружил это как IE6. Их строка агента пользователя: Mozilla/4.0 (совместимо; MSIE 8.0; Windows NT 5.1; Trident/4.0; Mozilla/4.0 (совместимо; MSIE 6.0; Windows NT 5.1; SV1); .NET CLR 2.0.50727) – neave
Я изучал это и кажется, что это происходит только в том случае, если IE находится в режиме совместимости. – Jonathan
очень полезная тема. Я использовал это, чтобы скрыть объявление <?xml>
для IE6.Оказывается, IE6 проверяет только первую строку документа DOCTYPE нюхают, а это значит, что если <?xml>
строка присутствует, IE6 будет оказывать в режиме совместимости независимо от DOCTYPE, следующего за <?xml>
декларации
Я не уверен, если его чтобы включить оперный чек, но все равно включил его.
//check if IE 6 or less
$not_lte_ie6 = true;
$ua = strtolower($_SERVER['HTTP_USER_AGENT']);
if(strpos($ua,'msie') !== FALSE) {
if(strpos($ua,'opera') === FALSE) {
if(preg_match('/(?i)msie [1-6]/',$ua)) $not_lte_ie6 = false;
}
}
if ($not_lte_ie6)
echo "<?xml version='1.0' encoding='UTF-8'?>\n";
Разве это не должно быть ===? – Benubird
Перечисленные методы будут часто флаг браузеры с определенными плагинов (MathPlayer, например; а также некоторые вредоносные панели инструментов).
я нахожу гораздо более надежным методом является:
if(preg_match('/^Mozilla\/4\.0 \(compatible; MSIE 6/', $_SERVER['HTTP_USER_AGENT']) != 0)
Фрагмент в if возвращает TRUE, если обнаружен IE6. –
Как и все остальные сказали, там будет ложные срабатывания, просто проверяя агента пользователя ... так почему бы не использовать как, пользователь проверка агента и условный комментарий.
, например ...
<? if (preg_match('/\bmsie 6/i', $_SERVER['HTTP_USER_AGENT']) { ?>
<!--[if IE 6]>
// ie6 only stuff here
<![endif]-->
<? } ?>
Таким образом, вы не будете отправлять обратно этот ненужный код для большинства браузеров ... но все равно будет в безопасности в случае ложных срабатываний.
Что-то проще:
if(stristr(strtolower($_SERVER['HTTP_USER_AGENT']), "msie 6.0")) {
// IE6? Aren't you out of fashion yet?
}
function isOldIE() {
// don't support IE6 or below
return preg_match('/MSIE [1-6]/', $_SERVER['HTTP_USER_AGENT']);
}
Вы можете использовать его для многих браузеров, но это отнимает много времени, а иногда ложноположительный ...
function do_stylesheet_link() {
// Picks up appropriate css file depending on the user-agent
// if (stristr($_SERVER['HTTP_USER_AGENT'], 'Firefox')) {
//echo '<link rel="stylesheet" href="css/firefox.css" type="text/css" />'; }
//elseif (stristr($_SERVER['HTTP_USER_AGENT'], 'Chrome')) {
//echo '<link rel="stylesheet" href="css/chrome.css" type="text/css" />'; }
//elseif (stristr($_SERVER['HTTP_USER_AGENT'], 'Safari')) {
//echo '<link rel="stylesheet" href="css/safari.css" type="text/css" />'; }
//elseif (stristr($_SERVER['HTTP_USER_AGENT'], 'Opera')) {
//echo '<link rel="stylesheet" href="css/opera.css" type="text/css" />'; }
if (stristr($_SERVER['HTTP_USER_AGENT'], 'MSIE 6.')) {
echo '<link rel="stylesheet" href="css/ie6.css" type="text/css" />'; }
elseif (stristr($_SERVER['HTTP_USER_AGENT'], 'MSIE 7.')) {
echo '<link rel="stylesheet" href="css/ie7.css" type="text/css" />'; }
elseif (stristr($_SERVER['HTTP_USER_AGENT'], 'MSIE 8.')) {
echo '<link rel="stylesheet" href="css/ie8.css" type="text/css" />'; }
else {
echo '<link rel="stylesheet" href="css/style.css" type="text/css" />';
}
}
if(substr($_SERVER['HTTP_USER_AGENT'],0,34)=="Mozilla/4.0 (compatible; MSIE 6.0;") echo "I am stupid IE6";
IE 6 Всегда начинается с «Mozilla/4.0 (совместим; ? MSIE 6.0;» IE 7,8 имеют "MSIE 6" в середине ...
function isIE($versions=array()) {
if (!empty($versions))
$versions = '('.implode('|',$versions).')';
else
$versions = '1?\d';
$ua = $_SERVER['HTTP_USER_AGENT'];
$is_not_opera = false===stripos($ua, 'opera');
return $is_not_opera && preg_match('/\bmsie '.$versions.'\./i', $ua);
}
Использование:
$is_ie = isIE(); //Any version
$is_ie_7 = isIE(array(7)); //IE 7
$is_old_id = isIE(array(6,7));//IE 7 and 8
- 1. В IE6, как я могу определить, переопределено ли window.open?
- 2. Могу ли я забыть о IE6?
- 3. С php strftime я могу определить% p?
- 4. PHP get_browser: как определить ie7 по сравнению с ie6?
- 5. Должен ли я поддерживать IE6?
- 6. Как я могу определить мертвые файлы php?
- 7. PHP Arrays, могу ли я определить свой собственный класс Array?
- 8. Могу ли я определить дельта значения массива PHP?
- 9. Могу ли я определить, что вызвало сборку?
- 10. iphone: могу ли я определить тип URL?
- 11. Как я могу определить, уникален ли объект?
- 12. Как я могу определить, работает ли «встроенный»?
- 13. Могу ли я определить несколько LinearLayouts массивом?
- 14. Могу ли я определить несколько статических блоков?
- 15. Могу ли я определить метод внутри метода?
- 16. Как я могу определить, объединена ли форма?
- 17. Могу ли я определить размер для DefaultTableModel?
- 18. Как я могу определить, работает ли mysql_real_escape_string
- 19. Почему я могу определить функцию PHP с непечатаемым символом?
- 20. Могу ли я определить ссылку с изображением с определенным href
- 21. Могу ли я искать папки с php?
- 22. Могу ли я анализировать hg19.2bit с php?
- 23. Как я могу проверить свой сайт с ie6
- 24. PHP - Как я могу определить метод с помощью другого метода?
- 25. Как определить, могу ли я открыть браузер с помощью C
- 26. elasticsearch: могу ли я определить синонимы с boost?
- 27. Могу ли я определить пользовательскую проверку с параметрами Loopback?
- 28. Последовательности CORBA: могу ли я определить последовательности объектов с методами?
- 29. Могу ли я определить среду с помощью HTML-кода?
- 30. Могу ли я определить размеры FLV с помощью FlowPlayer?
Любая конкретная причина, вы хотите сделать это – staticsan
ха-ха позволяет убить IE6 HTTP : //www.bringdownie6.com/ – lock
Потому что это старое и трудоемкое время для разработки, а иногда вы хотите просто перенаправить их на дрянной, старую версию вашего сайта. –