Autor Zpráva
VeroNikaV
Profil *
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
zkusil bych parse_url
Virtus
Profil
Tohlo by se taky mohlo hodit pro inspiraci: parse_url (konkrétní koment: unparser_url)
VeroNikaV
Profil *
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
}
psáno bez editoru a nevyzkoušeno, možná budou potřeba lehké úpravy :)
VeroNikaV
Profil *
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
VeroNikaV:
$adresa = preg_replace("~&[hs]=[^&]+~i", "", $url);
VeroNikaV
Profil *
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&amp;h=TAQHfGdsP&amp;s=1" target="_blank" rel="nofollow nofollow" .........';



V description je takových odkazů více. Více je tam i textů.

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: