Autor Zpráva
GeneralDv
Profil
Potřebuji helfnout.. dělám jeden script na zjištění co zadal návštěvník do vyhledavače za výraz (url dostávam přes http_referrer). Kus kde je problém mi má vytáhnout z URL adresy obsah proměnné $_GET, mám např. URL:

www.google.cz/webhp?sourceid=navclient-ff#hl=cs&source=hp&q=testovaci+obsah&btnG=Vyhledat+Googlem&lr=&aq=f&oq=testovaci+obsah&fp=16bff88525bbbf92

z ní potřebuji vybrat pouze
q=testovaci+obsah
//popřípadě
testovaci+obsah

Udělal jsem regulár:

$promenna="q";
preg_match_all('/http\:\/\/.*&*('.$promenna.'\=.*)&*/',$url,$matches);


jenže se mi vrací výsledek v této podobě:

q=testovaci+obsah&fp=16bff88525bbbf92

Poradíte mi prosím jak to mám "oříznout" ?
AM_
Profil
preg_match('~[\\?&]q\\=[^&]*)~i',$url,$matches);

Je to jednodušší a bude to fungovat vždy (google.com?q=test s tvým výrazem ošklivě selže - kolem q=test nejsou žádné &). Jestli tam mám nějakou drobnou chybku tak se omlouvám, netestoval jsem to, ale to už si snad kdyžtak zvládneš opravit, každopádně tohle je cesta správným směrem :)
GeneralDv
Profil
Tak to teda nevim.. chyběl ti tam '(', když mam ten regulár:
~([\\?&]q\\=[^&]*)~i

a URL:
www.google.cz/#q=test

Teď mi to pro změnu nevrací nic.. zkoušim to a začínam mít pocit že to snad ani nejde..
Majkl578
Profil
Zkus toto (upravený výraz od AM_):
preg_match('~[\?&#]q\=([^&]+)~i', $url, $matches);
var_dump($matches[1]);
mattyZEM
Profil
Nebo použij substr :)
GeneralDv
Profil
Majkl578: to by šlo, oboum díky
DoubleThink
Profil *
Nebude lepší použít přímo funkci na to dělanou? parse_str().
GeneralDv
Profil
DoubleThink:
To sem ani nečekal, každopadně to použiju dík za info.
AM_
Profil
DoubleThink:
"Parses str as if it were the query string passed via a URL and sets variables in the current scope."
To mi přijde jako hrozná prasárna, mohlo by to být i hackery zneužitelné, snad to leda šikovně zabalit do funkce, kde "current scope" neovlivní proměnné programu. Faktem je, že část za hash křížkem už není query string, takže na tuhle verzi by to nefungovalo (ano, taky jsem se divil, ale google si URL s kotvou přesměruje na ?q=query)
Majkl578
Profil
AM:
Ta funkce má druhý parametr, pokud je zadán, vrátí data jako pole referencí. Nicméně si myslím, že ten regulár je lepší volba. Nezajímá ho, zda je q= za otazníkem nebo za mřížkou.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: