#1 Tomáš Kraina: Řekl bych, že nic jiného než reguláry se u takovéhoto ořezávání použít nedá. Str_replace je tady nepoužitelný, protože "nehlídá okraje".
Pozor na trim
Asi před půl rokem jsem si všiml v Davídkových skriptech, že pomocí funkcí trim/ltrim/rtrim neořezává jen mezery, ale i jiné znaky. Moc se mi to líbilo a začal jsem to hojně využívat.
Poslední dobou mi ale začaly některé skripty pracovat nějak divně. Po dlouhém hledání jsem přišel na to, že zádrhel byl právě v používání těchto funkcí. Druhý parametr trim funkcí je totiž seznam znaků a já jsem ho používal jako obyčejný řetězec a pak jsem se divil, že výsledkem tohoto:
$url = '/nors4'; echo $url = ltrim($url, 'http://');
je nors4 místo očekávaného /nors4.
Hodnocení
Komentáře
Co třeba:
$url = substr($url, 0, 7) === 'http://' ? substr($url, 7) : $url;
ale na regulérní výrazy to nemá.
#1 Tomáš Kraina: Ještě k těm regulárům:
Použil bych spíše variantu bez expanze. Myslím, že to bude rychlejší (udělám na to nějaké testy).
preg_replace('%^http://%', '', $url);
Máš pravdu. Teď jsem to zkoušel, tvoje varianta
preg_replace('%^http://%', '', $url);
mi vyšla průměrně o nějakých 10% rychlejší při 50-ti znakovém url. Čím je url delší tím bude samozřejmě zápis s expanzí pomalejší. Navíc je i delší na napsání :)
A můžu vědět, jak řešíš ořezávání teď? Jelikož je drůhý parametr fce *trim seznam znaků, tak z ltrim('http://', '/httpstranka') dostaneš tohle: 'stranka'. Osobmě mi přijde nejlepší tady využít reguláry: preg_replace('~^http://(.*)$~', '$1', $url);