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

2009-01-20 17:04:43

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);

Na tento komentář odpověděl [2] Dundee
Na tento komentář odpověděl [4] Dundee
[2] Dundee
2009-01-20 17:14:18

#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".

[3] LM
2009-01-20 17:34:19

Co třeba:

$url = substr($url, 0, 7) === 'http://' ? substr($url, 7) : $url;

ale na regulérní výrazy to nemá.

[4] Dundee
2009-01-20 19:54:27

#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);

2009-01-20 20:24:02

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í :)

Komentáře již nelze přidávat