|
|
|
| Есть строка:
Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13
$useragent = $_SERVER['HTTP_USER_AGENT'];
$useragent выводит Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13
Никак не могу заменить эту всю строку на Firefox/3.6.
Пробовал по этому
Но вышло заменить лишь слово Firefox, а не версию браузера.... | |
|
|
|
|
|
|
|
для: TrEK
(24.02.2011 в 15:31)
| | Хм... можно поступить как-то так
<?php
if($useragent == "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13")
{
$useragent = "Firefox/3.6";
}
?>
|
Или нужно что-то другое? | |
|
|
|
|
|
|
|
для: cheops
(24.02.2011 в 17:02)
| | Ну вообще у меня :
<?php
$useragent = $_SERVER['HTTP_USER_AGENT'];
$browser = 'none';
if(strpos($useragent, "Firefox") !== false) $browser = 'Firefox';
echo "$browser<br>";
?>
|
Так как для каждой версии браузера выводится своя строка, я думаю нецелесобразно для каждой такой строки писать условие.
Возможна как-то так :
$browser =(ereg('Firefox/([0-9].[0-9]{1,2})', $useragent , $browser))
Только не с устаревшими функциями? | |
|
|
|
|
|
|
|
для: TrEK
(24.02.2011 в 18:51)
| | Можно поступить как-то так
<?php
if(preg_match('|Firefox/([0-9]\.[0-9]{1,2})|', $useragent , $out))
{
$browser = $out[0];
}
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(24.02.2011 в 19:37)
| | Работает , спасибо :)
А таким способом можно записать ?
<?php
if(preg_match('|Firefox/([0-9]\.[0-9]{1,2})|', $useragent , $out) !== false) $browser = $out[0];
?>
|
| |
|
|
|
|
|
|
|
для: TrEK
(25.02.2011 в 10:53)
| | Не стоит, false возвращается preg_match() только если в регулярном выражении какие-то ошибки, если ничего не найдено, возвращается 0 (а у вас оператор неэквивалентности, а не неравенства). | |
|
|
|
|
|
|
|
для: cheops
(25.02.2011 в 11:05)
| | Ясно., значит просто
<?php
if(preg_match('|Firefox/([0-9]\.[0-9]{1,2})|', $useragent , $out)) $browser = $out[0];
if(preg_match('|Opera/([0-9]{1,2}\.[0-9]{1,2})|', $useragent , $out)) $browser = $out[0];
if(preg_match('|Navigator/([0-9]\.[0-9]{1,2})|', $useragent , $out)) $browser ="Netscape $out[0]";
if(preg_match('|Chrome/([0-9]\.[0-9]{1,2})|', $useragent , $out)) $browser =$out[0];
?>
|
Не выводит почему-то Safari:
Mozilla/5.0 (Windows; U; Windows NT 5.1; ru-RU) AppleWebKit/533.19.4 (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4
if(preg_match('|Safari/([0-9]{1,2,3}\.[0-9]{1,2})|', $useragent , $out)) $browser = $out[0];
Что надо заменить в строке обработки, чтоб выводило не Firefox/3.6, а Firefox/3.6.13:
Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13
И почему-то не выводит версию этой ОС:
Mozilla/5.0 (X11; U; Linux x86_64; ru; rv:1.9.2.12) Gecko/20101027 Ubuntu/10.04 (lucid) Firefox/3.6.12
if(preg_match('|Ubuntu/([0-9]{1.2}\.[0-9]{1,2})|', $useragent , $out)) $os =$out[0];
================================================================
Где можно узнать как правильно орудовать этими ([0-9]{1.2}\.[0-9]{1,2}) ?
Могли бы сделать маленький экскурс? | |
|
|
|
|
|
|
|
для: TrEK
(25.02.2011 в 12:02)
| | >if(preg_match('|Safari/([0-9]{1,2,3}\.[0-9]{1,2})|', $useragent , $out)) $browser = $out[0];
if(preg_match('|Safari/([0-9]{1,3}\.[0-9]{1,2}\.[0-9]{1,2})|', $useragent , $out)) $browser = $out[0];
>Что надо заменить в строке обработки, чтоб выводило не Firefox/3.6, а Firefox/3.6.13:
То же самое, что в предыдущей строке - нужно добавить третью цифру в регулярном выражении
>И почему-то не выводит версию этой ОС:
>if(preg_match('|Ubuntu/([0-9]{1.2}\.[0-9]{1,2})|', $useragent , $out)) $os =$out[0];
В конструкции {1.2} используется точка вместо запятой - это ошибка. | |
|
|
|
|
|
|
|
для: TrEK
(25.02.2011 в 12:02)
| | >Где можно узнать как правильно орудовать этими ([0-9]{1.2}\.[0-9]{1,2}) ?
>Могли бы сделать маленький экскурс?
Все что заключено в квадратные скобки - это один символ, в данном случае от 0 до 9. В фигурных скобках указывается сколько раз этот символ может повторяться в данном случае от 1 до 2 раз. | |
|
|
|
|
|
|
|
для: cheops
(25.02.2011 в 14:20)
| | Ясно.
Тогда для строки:
Mozilla/5.0 (X11; U; Linux x86_64; ru; rv:1.9.2.12) Gecko/20101027 Ubuntu/10.04 (lucid) Firefox/3.6.12
должно быть так?:
if(preg_match('|Ubuntu/([0-9]{1,2}\.[0-9]{1,2}\.[a-z]{1,5})|', $useragent , $out)) $os =$out[0];
echo $os; | |
|
|
|
|
|
|
|
для: TrEK
(25.02.2011 в 15:33)
| | Нет, \. - это символ точки, а у вас пробел, кроме того lucid заключено в круглые скобки. Напишите прямо так
if(preg_match('|Ubuntu/([0-9]{1,2}\.[0-9]{1,2} \(lucid\))|', $useragent , $out)) $os =$out[0];
Или последовательность (lucid) может быть другой? | |
|
|
|
|
|
|
|
для: cheops
(25.02.2011 в 19:14)
| | А если побить $useragent эксплодом по пробелам, а потом вытащить браузер array_pop'ом? | |
|
|
|
|
|
|
|
для: cheops
(25.02.2011 в 19:14)
| | Конечно может быть другой | |
|
|
|
|
|
|
|
для: TrEK
(25.02.2011 в 20:04)
| | Значит никак не получится? | |
|
|
|
|
|
|
|
для: TrEK
(27.02.2011 в 19:57)
| | Можно поступить следующим образом
if(preg_match('|Ubuntu/([0-9]{1,2}\.[0-9]{1,2}[\s]+[^\s]+[\s]+)|', $useragent , $out)) $os =$out[0]; | |
|
|
|
|
|
|
|
для: cheops
(27.02.2011 в 20:21)
| | Спасибо, все на "УРА!" | |
|
|
|