Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Wyrażenia regularne - zapisywanie do tablicy podciągów pasujących do wzorca
ZaqU
post
Post #1





Grupa: Zarejestrowani
Postów: 71
Pomógł: 1
Dołączył: 21.01.2013

Ostrzeżenie: (0%)
-----


Witam,

Od ponad godziny głowię się nad wykrywaniem języka przeglądarki. Korzystam z $_SERVER['HTTP_ACCEPT_LANGUAGE'], która to zwraca mi takie coś:
Kod
pl-PL,pl;q=0.8,en-US;q=0.6,en;q=0.4

To co mnie interesuje, to wyciągnięcie z tego ciągu pl-PL, a w drugiej kolejności en-US. Muszę zatem użyć wyrażeń regularnych, ale nie mam zielonego pojęcia w jaki sposób mógłbym zapisać do tablicy podciągi pasujące do wzorca. Przeszukałem całą dokumentację preg_* na php.net, ale nie znalazłem niczego co by mi pomogło (może coś przeoczyłem? w końcu już dawno po północy).

To czym dysponuje to sam wzorzec:
Kod
/[a-z]{2}\-[A-Z]{2}/

Ale potrzebuję do tego jeszcze tylko funkcji - wystarczy mi sama nazwa. (IMG:style_emoticons/default/smile.gif)

Ten post edytował ZaqU 21.04.2014, 11:00:21
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
ZaqU
post
Post #2





Grupa: Zarejestrowani
Postów: 71
Pomógł: 1
Dołączył: 21.01.2013

Ostrzeżenie: (0%)
-----


Prawda jest taka, że na każdej przeglądarce działa to inaczej. Przykłady i założenia z pierwszego postu pochodziły z Chrome'a, ale testowałem to też na FF, Operze oraz IE. Wyniki były takie, że na jednych przeglądarkach mamy w ciągu pl-PL, w innym pl-pl, w jeszcze innym samo pl.
Go to the top of the page
+Quote Post
by_ikar
post
Post #3





Grupa: Zarejestrowani
Postów: 1 798
Pomógł: 307
Dołączył: 13.05.2009
Skąd: Gubin/Wrocław

Ostrzeżenie: (0%)
-----


Cytat(ZaqU @ 21.04.2014, 12:27:15 ) *
Prawda jest taka, że na każdej przeglądarce działa to inaczej. Przykłady i założenia z pierwszego postu pochodziły z Chrome'a, ale testowałem to też na FF, Operze oraz IE. Wyniki były takie, że na jednych przeglądarkach mamy w ciągu pl-PL, w innym pl-pl, w jeszcze innym samo pl.


W "in_array" możesz jako argument podać tablicę z argumentami, dzięki czemu tych porównań może być kilka:

  1. <?php
  2.  
  3. $v = 'pl-PL,pl;q=0.8,en-US;q=0.6,en;q=0.4';
  4.  
  5. preg_match_all('#([a-z]{1,8}(-[a-z]{1,8})?)\s*(;\s*q\s*=\s*(1|0\.[0-9]+))?#i', $v, $matches);
  6.  
  7. echo '<pre>'.print_r($matches, true).'</pre>';
  8.  
  9. if(in_array(array('pl-PL', 'pl'), $matches[1]))
  10. {
  11. //do something
  12. } elseif(in_array(array('en-US', 'en'), $matches[1]))
  13. {
  14. //do something
  15. }
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 16.10.2025 - 18:48