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

Форум Регулярные Выражения

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

 

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

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

тема: preg_replace - не могу заменить никак ($_SERVER[HTTP_USER_AGENT])
 
 автор: TrEK   (24.02.2011 в 15:31)   письмо автору
 
 

Есть строка:
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, а не версию браузера....

  Ответить  
 
 автор: cheops   (24.02.2011 в 17:02)   письмо автору
 
   для: 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";
}
?>

Или нужно что-то другое?

  Ответить  
 
 автор: TrEK   (24.02.2011 в 18:51)   письмо автору
 
   для: 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))
Только не с устаревшими функциями?

  Ответить  
 
 автор: cheops   (24.02.2011 в 19:37)   письмо автору
 
   для: TrEK   (24.02.2011 в 18:51)
 

Можно поступить как-то так
<?php
  
if(preg_match('|Firefox/([0-9]\.[0-9]{1,2})|'$useragent $out))
  {
    
$browser $out[0];
  }
?>

  Ответить  
 
 автор: TrEK   (25.02.2011 в 10:53)   письмо автору
 
   для: cheops   (24.02.2011 в 19:37)
 

Работает , спасибо :)
А таким способом можно записать ?

<?php
  
if(preg_match('|Firefox/([0-9]\.[0-9]{1,2})|'$useragent $out)  !== false)   $browser $out[0];
?>
   

  Ответить  
 
 автор: cheops   (25.02.2011 в 11:05)   письмо автору
 
   для: TrEK   (25.02.2011 в 10:53)
 

Не стоит, false возвращается preg_match() только если в регулярном выражении какие-то ошибки, если ничего не найдено, возвращается 0 (а у вас оператор неэквивалентности, а не неравенства).

  Ответить  
 
 автор: TrEK   (25.02.2011 в 12:02)   письмо автору
 
   для: 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}) ?
Могли бы сделать маленький экскурс?

  Ответить  
 
 автор: cheops   (25.02.2011 в 14:19)   письмо автору
 
   для: 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} используется точка вместо запятой - это ошибка.

  Ответить  
 
 автор: cheops   (25.02.2011 в 14:20)   письмо автору
 
   для: TrEK   (25.02.2011 в 12:02)
 

>Где можно узнать как правильно орудовать этими ([0-9]{1.2}\.[0-9]{1,2}) ?
>Могли бы сделать маленький экскурс?
Все что заключено в квадратные скобки - это один символ, в данном случае от 0 до 9. В фигурных скобках указывается сколько раз этот символ может повторяться в данном случае от 1 до 2 раз.

  Ответить  
 
 автор: TrEK   (25.02.2011 в 15:33)   письмо автору
 
   для: 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;

  Ответить  
 
 автор: cheops   (25.02.2011 в 19:14)   письмо автору
 
   для: 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) может быть другой?

  Ответить  
 
 автор: Deed   (25.02.2011 в 19:58)   письмо автору
 
   для: cheops   (25.02.2011 в 19:14)
 

А если побить $useragent эксплодом по пробелам, а потом вытащить браузер array_pop'ом?

  Ответить  
 
 автор: TrEK   (25.02.2011 в 20:04)   письмо автору
 
   для: cheops   (25.02.2011 в 19:14)
 

Конечно может быть другой

  Ответить  
 
 автор: TrEK   (27.02.2011 в 19:57)   письмо автору
 
   для: TrEK   (25.02.2011 в 20:04)
 

Значит никак не получится?

  Ответить  
 
 автор: cheops   (27.02.2011 в 20:21)   письмо автору
 
   для: 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];

  Ответить  
 
 автор: TrEK   (01.03.2011 в 10:17)   письмо автору
 
   для: cheops   (27.02.2011 в 20:21)
 

Спасибо, все на "УРА!"

  Ответить  
Rambler's Top100
вверх

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