Autor | Zpráva | ||
---|---|---|---|
VeroNikaV Profil * |
#1 · Zasláno: 24. 3. 2013, 11:22:42
Mám URL v tomto tvaru:
http://www.example.com/kategorie/nazev-clanku.html &h=JAQEpjlel&s=1 a potřebovala bych hlavně poslední dvě proměnné smazat. Uvažovala jsem nad použitím explode, jenže co když v URL adrese sama použiji proměnnou. Chtělo by to script, který ASI kód rozdělí explode a scriptem říci, ať poslední dvě proměnné prostě smaže. Ale jak?
Máte nějaký nápad? Hrozně moc děkuji. |
||
Tori Profil |
explode je dobrý nápad. Query string převedete na pole funkcí parse_str, unset vyhodí nechtěné prvky, http_build_query z pole zase složí query string.
|
||
Lamicz Profil |
#3 · Zasláno: 24. 3. 2013, 11:27:32
zkusil bych parse_url
|
||
Virtus Profil |
#4 · Zasláno: 24. 3. 2013, 11:32:24
Tohlo by se taky mohlo hodit pro inspiraci: parse_url (konkrétní koment: unparser_url)
|
||
VeroNikaV Profil * |
#5 · Zasláno: 24. 3. 2013, 11:32:56
Také mě parse_url napadl, jen že jak potom vyjmout poslední dvě proměnné?
|
||
Virtus Profil |
Mohlo by fungovat něco takového:
$oldURLArray = parse_url( $oldURL ); if( isset( $oldURLArray['query'] ) ){ $auxURLArray = explode('&', $oldURLArray['query']); $queryParamsCount = count( $auxURLArray ); } else { $queryParamsCount = 0; } if( 2 < $queryParamsCount ){ $newURLArray = explode('&', $url, -2); //předpoklá se, že ty dvě proměnné, kterých se chci zbavit, budou vždy na konci URL adresy a // URL adresa neobsahuje fragment: #fragment, ten by byl v tomhle případě taky odstraněn $newURL = implode('&', $newURLArray); } elseif( ( 2 == $queryParamsCount ) || ( 0 == $queryParamsCount ) ) { $newURL = isset( $oldURLArray['scheme'] ) ? $oldURLArray['scheme'] . '://' : ''; $newURL .= isset( $oldURLArray['host'] ) ? $oldURLArray['host'] : ''; $newURL .= isset( $oldURLArray['path'] ) ? $oldURLArray['path'] : ''; } else { //tady by byl kód proto co dělat, když URL bude mít jenom jednu proměnnou } |
||
VeroNikaV Profil * |
#7 · Zasláno: 24. 3. 2013, 12:38:14
Použít query z parse_url nejde, protože v mojí URL chybí otazník, který by parse_url řekl, že jde o query. Ten otazník mě tam chybí právě záměrně, protože ho takto získávám z externího zdroje RSS a právě proto tyto dvě poslední &= tam nechci mít.
|
||
Tori Profil |
VeroNikaV:
$url = 'http://www.example.com/kategorie/nazev-clanku.html&h=JAQEpjlel&s=1&neco=nic'; list($base, $params) = explode('&', $url.'&', 2); // "&" přidáte i na konec, aby se URL vždy rozdělila na dvě části i bez parametrů parse_str($params, $params); unset($params['h'], $params['s']); // odstranění podle klíče "h" a "s" // $params = array_slice($params, 2, null, true); // odstraní jakékoli první dva $url = $base . (!empty($params) ? '?'.http_build_query($params) : ''); // nebo si místo otazníku dejte zas &, nevím, co má být výsledkem var_dump($url); ↓: Pěkně :-) |
||
Davex Profil |
#9 · Zasláno: 24. 3. 2013, 13:00:02
VeroNikaV:
$adresa = preg_replace("~&[hs]=[^&]+~i", "", $url); |
||
VeroNikaV Profil * |
#10 · Zasláno: 24. 3. 2013, 13:30:22 · Upravil/a: VeroNikaV
Davex .... hrozně moc děkuji !!
Ještě mám poslední dotaz. URL adresu mám vloženou v textu. Jak lze v daném textu URL najít a změnit ji tím Davex preg_replace? $description = 'Více se lze dočíst v článku: <a href="http://www.example.com/kategorie/nejaky-clanek.html&h=TAQHfGdsP&s=1" target="_blank" rel="nofollow nofollow" .........'; V description je takových odkazů více. Více je tam i textů. |
||
Časová prodleva: 11 let
|
0