Řetězce jsou vlastně „kousky textu“. Nebo-li mohou obsahovat cokoliv.
Pro vypsání nějakého textu (řetězce) používáme nejčastěji příkaz echo a to třemi způsoby:
- řetězec uzavřený do jednoduchých uvozovek – apostrofů
- řetězec uzavřený do dvojitých uvozovek
- použít tzv. syntaxi heredoc v případě dlouhých textů
První způsob (apostrofy):
<?php echo 'Toto je příklad řetězce.'; ?>
Druhý způsob (uvozovky):
<?php echo "Toto je příklad řetězce."; ?>
Důležité rozdíly mezi těmito dvěma způsoby zápisu jsou:
- do uvozovek můžeme psát jméno proměnné (viz dále) přímo.
- do apostrofů musíme proměnnou zapsat tak, že ji „obalíme“ tečkami (tzn. konkadence):
<?php $body = 15; echo 'Pro získání oprávnění musíte mít ' .$body. ' bodů.'; ?>
- do uvozovek se dají psát speciální znaky jako je např. \n – odřádkování nebo \t – tabulátor a další (POZOR, prohlížeče neznají konstrukci \n, a tak nový řádek vidíme pouze ve zdrojovém kódu).
- do uvozovek můžeme psát i další uvozovky, ale musí použít tzv. escape sekvenci (viz níže). Použití uvozovek se tím pádem méně hodí na výpis HTML kódu, protože je složitější.
Třetí způsob:
V případě, že potřebujete vypsat delší text, můžete použít tzv. syntaxi heredoc. Syntaxe heredoc začíná trojicí znaků <<<, za kterou následuje nějaký text nazývaný identifikátor (v našem případě MMM). Stejný identifikátor musíme použít na ukončení takovéhoto řetězce. Za úvodním identifikátorem nesmí začínat text. Ten musí být umístěn na novém řádku. Ukončovací identifikátor musí být na samostatném řádku, před ním nesmí být ani mezera, za ním musí být středník a nesmí se objevit v daném „dlouhém“ textu.
<?php $text = <<<MMM Toto je příklad dlouhého řetězce na více řádků v heredoc syntaxi. Mohou to být dlouhé věty..... Lorem ipsum dolor sit amet Consectetuer lobortis lorem amet rutrum Non Aenean Ut pellentesque condimentum Accumsan laoreet ut turpis elit Augue vitae Duis nec Nunc Eget elit feugiat quis Ut Vitae lobortis faucibus Aliquam wisi Nam Donec sociis dictum commodo Pede feugiat amet convallis metus Tincidunt parturient quam pretium sapien Nullam lorem libero vestibulum risus Et metus sed purus nec dipiscing est laoreet consectetuer enim Id sed diam tellus ipsum MMM; echo $text; ?>
Escape sekvence
Pokud do textu potřebujete zapsat uvozovky či apostrof, musíte před takovýto znak vložit tzv. escape sekvenci:
<?php echo "Tady bude uvozovka \" a text dále pokračuje."; // Vypíše: Tady bude uvozovka " a text dále pokračuje ?>
PHP v tomto případě ví, že pokud se před uvozovkami či před apostrofem nachází zpětné lomítko, nekončí řetězec, ale je třeba následný znak vypsat.
Pozn.: o escape sekvencích bude dále ještě zmíňka
Psaní HTML tagů do řetězců
V rámci psaní textových řetězců je možné také přímo do tohoto textu začlenit i jakékoliv HTML a CSS tagy. Příklad:
<?php echo 'Tady bude <span style="color: red;">červený text</span>. <br> Další text na novém řádku.'; ?>
Zjištění délky řetězce – strlen
V případě, že potřebujeme zjistit délku řetězce (počet znaků) využívá PHP k této operaci funkci strlen, v případě kódování UTF-8 v kombinaci s diakritikou se používá mb_strlen:
<?php echo mb_strlen('Řidič'); // Vypíše se číslo 5, protože slovo Řidič má 5 znaků ?>
Za funkcí strlen jsou v závorkách předány tzv. parametry funkce. V tomto případě je to pouze řetězec ‚ahoj‘. Zápis funkce se odborně nazývá volání funkce. Výsledkem je vypsání čísla 4, jinak řečeno funkce vrací hodnotu.
Funkci strlen můžeme využít i pro vypsání délky řetězce, pocházejícího z proměnné:
<?php $a = 'Miloslav Boudný'; // Přiřazení řetězce do proměnné a. echo mb_strlen($a); // Vypíše délku řetězce v proměnné $a, tedy číslo 15. ?>
Odstranění bílých mezer – trim
Další praktickou vestavěnou funkcí je trim.
Funkce trim odstraní tzv. bílé znaky ze začátku a z konce řetězce.
Za bílé znaky jsou považovány mezery, tabulátory, konce řádků a další znaky. Lze využít např. u zadávání textových polí do formuláře a jejich kontrolu.
Defaultně funkce trim odstraní tyto znaky:
- (ASCII 32 (0x20)), obyčejná mezera.
- (ASCII 9 (0x09)), tabulátor.
- (ASCII 10 (0x0A)), nová řádka (line feed).
- (ASCII 13 (0x0D)), návrat vozíku (carriage return).
- (ASCII 0 (0x00)), znak NUL.
- „x0B“ (ASCII 11 (0x0B)), vertikální tabulátor.
Malá ukázka:
<?php $text1 = " Karel "; $text2 = " Svoboda "; echo "Vaše jméno a příjmení je ".$text1." ".$text2; echo "<br>"; echo "Vaše jméno a příjmení je ".trim($text1)." ".trim($text2); // Je třeba si zobrazit zdrojový kód, jinak neuvidíte rozdíl. ?>
Funkce trim má také možnost zadání parametru
V následujícím příkladu je např. odstraněno písmeno K a S. Jedná se o znaky, které musí být na začátku.
<?php $text1 = "Karel"; $text2 = "Svoboda"; echo "Vaše jméno a příjmení je ".trim($text1,"K")." ".trim($text2,"S"); ?>
Příbuzné funkce:
- ltrim() – odstraní bílé mezery zleva
- rtrim() – odstraní bílé mezery zprava
Získání části řetězce – substr
Další často používanou funkcí je funkce SubStr. Ta slouží k získání části řetězce. Má 3 parametry – řetězec, pozici 1. znaku a délku (oddělené čárkou):
substr($řetězec, pozice 1. znaku, délka)
Vrací část řetězce určené délky od daného znaku. Pokud je pozice 1. znaku záporné číslo, bude se pozice počítat od konce. Pokud je záporná délka, bude řetězec tolik znaků od konce končit. Není-li délka vůbec zadána, funkce vrátí vše od prvního znaku do konce řetězce. Tady je několik příkladů:
<?php $text = "Caste hrani pocitacovach her nici krcni pater."; echo substr($text, 6)."<br>"; // vrací znaky od 6 pozice - hrani pocitacovach her nici krcni pater. echo substr($text, -6)."<br>"; // vrací znaky od 6 pozice zleva (od konce)- pater. echo substr($text, 6, 5)."<br>"; // vrací znaky od 6. pozice v počtu 5 dalších znaků - hrani echo substr($text, 6, -12)."<br>"; // vrací znaky od 6. pozice a z tohoto ještě odstaní 12 znaků od konce - hrani pocitacovach her nici echo substr($text, -6, 5)."<br>"; // vrací znaky od 6 pozice od konce v počtu 5 znaků - pater echo substr($text, -6, -3)."<br>"; // vrací znaky od 6 pozice od konce a poslední 3 znaky ještě taky odstraní - pat ?>
Nahrazení textového řetězce – str_replace
Asi nejpoužívanější funkcí je pak funkce str_replace. Obsahuje tři parametry – CO nahradit, ČÍM nahradit, KDE nahradit (oddělené čárkou):
str_replace(‚CO‘,’ČÍM‘,’KDE‘);
Příklad:
<?php $text = str_replace('ing.','Ing.', 'Tituly magistr - Mgr. a inženýr - ing. jsou na stejné úrovni. Píšou se vždy s velkým písmenem. Dříve se titul inženýr psal malými písmeny.'); echo $text; // pokud se v textu objeví "ing.", nahradí se textem "Ing.". ?>
Zjištění pozice textu – strpos
Další podobnou funkcí je pak funkce strpos (pro UTF-8 opět s prefixem mb_). Jedná se o zjištění pozice, na které se nachází hledaný text, přesněji řečeno za kterou začíná hledaný text:
strpos($text, „Hledaný text“);
<?php $text = "Není to PHP výborný jazyk?"; echo (mb_strpos($text, "PHP")); // vrací hodnotu 8 - pozice, za kterou začíná text "PHP" ?>
Počítají se samozřejmě i mezery.
Pozor na diakritiku!
Pozor na diakritické znaky. Minimálně u funkcí strlen a strpos není tzv. „multibyte safe„, což znamená, že „neumí“ počítat diakritické znaky správně. Proto se používá jejich novější podoba – mb_strlen, mb_strpos, která již tuto diakritiku počítá správně.