Podívejme se dnes na základní přehled funkcí, které se vám můžou hodit a jsou prakticky denně použitelné. Povětšinou je lze obejít vlastním kódem, a právě proto je dobré je znát, abychom neprogramovali nové „kolo“. Dnes se bude vše točit kolem řetězců, což je problematika, která je na programu každý den.
Měříme a vybíráme
Kdykoliv budete pracovat s řetězci, určitě budete potřebovat
minimálně funkci strlen(),
která vám zjistí délku řetězce. Díky ní už můžete testovat, zda
zadaný vstup z formuláře má minimální délku, či jestli nepřesahuje
povolené limity. Pokud k proměnné chcete přidat nějaký text, není
problém jej připojit pomocí tečky. Odebrání některé části je ale
komplikovanější. Základní funkcí pro tuto operaci je substr($string, $start,
$length), která ze $string vybere text od
$start, délky $length. Zajímavostí je, že můžete
$start zadat i záporný a pak se počítá odzadu. To samé platí
i pro $length.
$string = "Hi there! Merry Christmas.";
$new = substr($string, 10);
echo $new; // Merry Christmas.
Procházíme
Jak je vidět, 10 nám říká, že máme vybírat od 10. znaku. Z toho
jasně plyne, že jednotlivé znaky jsou očíslovány. Tuto vlastnost můžeme
jednoduše využít a procházet řetězec jako pole. Pokud si k tomu ještě
přihodíme funkce chr() a ord(), které převádějí znak
na jeho ASCII číslo, respektive naopak, pak máme celkem dobrý základ pro
sestavení Caesarovy šifry.
$string = "Zasifruj me";
for ($i = 0, $to = strlen($string); $i < $to; $i++) {
$string[$i] = chr(ord($string[$i]) + 5);
}
echo $string; // _fxnkwzo%rj
Toto vše používáme tehdy, když víme, kde chceme dané operace
provádět. Pokud se nám ale něco v textu „skrývá“, musíme to nejprve
najít. K tomu poslouží funkce strpos($string, $searched),
která vrátí index začátku výskytu $searched v proměnné
$string. Pokud se nic nenajde, vrací false.
$text = "Tady se ještě nic nevezme ... START A odtud bude už všechno vidět!!! END Teda, skoro všechno";
$start = strpos($text, 'START') + 6; // přičteme délku startu + jednu mezeru
$end = strpos($text, 'END');
$length = $end - $start;
if ($start !== false && $end !== false)
echo substr($text, $start, $length);
else
echo 'V textu není vyznačen start a end.';
Jak vidíte, práce s textem už začíná být vcelku zajímavá.
Funkce str_pad() vám
prodlouží řetězec do požadované délky. To se hodí, zvlášť pokud
chcete generovat nějakou fakturu. Můžete si vybrat, které znaky chcete
přidávat a kam - jestli na začátek, nebo na konec.
$input = "jedentisícstopadesátosm";
echo str_pad($input, 30, "-", STR_PAD_LEFT); // -----jedentisícstopadesátosm
Ošetřujeme
Již jsme si zmínili, že pro kontrolu délky vstupu lze použít funkci
strlen(). S tím si ale nikdy nevystačíme. A i kdyby nám
stačila pouze kontrola délky vstupu, tak i přesto nás může nepřítel
jednoduše obelstít. Stačí, aby zadal pár mezer – bílých znaků. Bílé
znaky - pro toho, kdo neví - jsou všechny „netisknutelné znaky“:
mezery, tvrdé mezery, tabulátory, odřádkování atp. Můžeme se jich
krásně zbavit pomocí funkce trim().
$input = "Ošizená délka vstupu. ";
echo strlen($input); // 36
echo "<br />";
$input = trim($input);
echo strlen($input); // 24
Ve výchozím nastavení trim odstraňuje ony bílé znaky. Ale může se
nám hodit, že chceme z konce a ze začátku řetězce odstranit i jiné
znaky než bílé. Například lomítka. K tomu má funkce ještě druhý parametr, kam zadáme výčet jednotlivých znaků. Tato funkce existuje
ještě ve variantách rtrim(), ltrim() – rozdíl je v tom,
že odstraňují znaky pouze z jedné strany.
Často potřebujeme posoudit vstup podle komplexnějšího pravidla. K tomu používáme takzvané regulární výrazy. Regulární výraz je sekvence znaků popisující požadovaný řetězec. Některé znaky mají samozřejmě zvláštní význam, a tak nám vznikne regulár, který je obecný a přitom dostatečně popisuje formát vstupu. Perfektním webem v češtině je například regularnivyrazy.info. Zde můžete najít jednoduché příklady a kvalitní přehled významu jednotlivých znaků.
V PHP používejte Perl compatible regulární výrazy! Jsou o mnoho
rychlejší než posix regulární výrazy a také toho zvládnou více.
Základní funkcí je preg_match, která zjistí,
zda daný řetězec vyhovuje reguláru.
V tomto příkladě chceme, aby uživatel zadal své telefonní číslo. Ale nevadí nám, když v něm uvede mezery. Proto jsme sestrojili regulární výraz, který nám vstup zkontroluje. (Zakomentujte inputy, které nechcete kontrolovat, a postupně si je pak vyzkoušejte.)
$input = "6027411"; // neprojde
$input = "602741147" // projde
$input = "602 741 147"; // projde
if (preg_match('#\d{3} ?\d{3} ?\d{3}#', $input))
echo "zadný text je správné telefonní číslo";
Skvělý seriál o regulárních výrazech naleznete také na Intervalu.
Když vypisujete nějaký text od uživatele a nemáte ho ošetřený od
znaků, které by vám mohly zamíchat v HTML, použijete funkci htmlspecialchars(),
která převede různé šipečky ve jménech uživatelů na
odpovídající HTML entity.
$nick = "<<HRACH>>";
echo "<h1>", htmlspecialchars($nick), "</h1>";
Uživateli často také nabízíte možnost vložit nějaký delší text
pomocí textarea. Jenže, když tento text vypíšete, jsou zadaná
odřádkování ta tam. Proto máme funkci nl2br(), která nahradí konce
řádků tagy br.
Zvětšujeme, zmenšujeme
Na závěr dnešního dílu si uvedeme funkce pro zvětšování a
zmenšování písmen. Základem je strtolower() a strtoupper() – převede
celý text na malá písmena, respektive na velká. Funkce ucfirst() převede první
písmeno na velké. Paralelou k ní je funkce lcfirst(), která převede
první písmeno na malé. Bohužel, funkce lcfirst() bude dostupná
zřejmě až v pozdějších vydáních PHP, a tak nám nezbývá, než si ji
vytvořit sami.
if (function_exists('lcfirst') === false) {
function lcfirst($string) {
$string[0] = strtolower($string[0]);
return $string;
}
}
Poslední zajímavou funkcí je ucwords(), která převede
všechna první písmena slov na velká.
Doufám, že se vám dnešní článek líbil, v případě spokojenosti a zájmu by mohlo vyjít další pokračování zaměřené na jinou tématickou oblast v PHP. K tomu se můžete vyjádřit v komentářích.
TIP: Přetáhni ikonu na hlavní panel pro připnutí webu






