Lekce 9 - Malá a velká písmena v textovém řetězci
V minulé lekci, Opakování textových řetězců v PHP, jsme se dozvěděli, jak opakovat jednotlivé znaky v textových řetězcích a části textových řetězců.
V této lekci kurzu PHP funkcí si ukážeme, jak v textových řetězcích měnit velikost písmen, tedy velká písmena na malá a naopak. Díky těmto funkcím můžeme při psaní dlouhých textů zajistit, že například na začátku věty bude vždy velké písmeno.
lcfirst()
Název je ze zkratky lc
= Lower
Case (malé písmeno), first
= první. Je to
funkce, která první znak v textovém řetězci změní z velkého písmena na
malé. Funkce lcfirst()
přijímá pouze jeden parametr, kterým je
náš textový řetězec. Podmínkou je, aby se znak nacházel v
anglické abecedě. Ukažme si jednoduchý příklad na tuto
funkci:
$text = "Příliš žluťoučký kůň úpěl ďábelské ódy. "; $text .= "Toto je další věta textového řetězce."; $lcfirst = lcfirst($text); print($lcfirst);
V našem textovém řetězci se změní první velké písmeno na
začátku řetězce na malé, tedy Příliš -> příliš
.
Funkce **NEMĚNÍ velké písmeno za malé u každé věty! Výstupem
na stránku je:
Pokud se první znak nenachází v anglické abecedě,
dostaneme chybně změněný textový řetězec. Důvodem je, že funkce
lcfirst()
není multi-byte safe.
Chybně změněný řetězec může být například tento:
$text = "Čeština je občas problém."; $lcfirst = lcfirst($text); print($lcfirst);
Řetězec bude chybně převeden nebo vůbec:
ucfirst()
Je podobnou funkcí jako lcfirst()
, název je taktéž zkratka:
uc
= Upper Case. Rozdílem je,
že první znak, který se nachází v anglické abecedě, je změněn z malého
písmena na velké. Funkce ucfirst()
přijímá pouze jeden
parametr, kterým je náš textový řetězec. Příkladem funkce
ucfirst()
může být:
$text = "větu začínáme vždy s velkým písmenem! "; $text .= "Tak pravila naše paní učitelka."; $ucfirst = ucfirst($text); print($ucfirst);
Jak si můžeme všimnout, první znak v našem textovém řetězci začíná
malým písmenem. Jelikož jsme napsali větu, je vhodné ji psát s velkým
písmenem. Řetězec je umístěn ve funkci ucfirst()
, bude tedy
jeho první znak změněn na velké písmeno. Avšak si opět musíme dát
pozor, že u druhé věty k žádné změně nedojde. Druhá věta se totiž
slučuje s naším textovým řetězcem a je tedy jeho součástí:
Dojde tedy ke změně malého písmena na velké na začátku řetězce u
slova větu -> Větu
. Druhá věta zůstane nezměněna.
Funkce ucfirst()
není multi-byte
safe. Pokud první znak v řetězci nebude z anglické abecedy, dojde k
chybnému převodu.
$text = "čeština je občas problém"; $ucfirst = ucfirst($text); print($ucfirst);
Řetězec bude chybně převeden nebo vůbec:
ucwords()
Je funkce, která v každém slovu v textovém řetězci změní první znak
anglické abecedy z malého písmena na velký. Znaky uc
v názvu
funkce znamená zase Upper Case. Funkce
ucwords()
přijímá celkem 2 parametry, kde prvním z nich je
náš textový řetězec. Druhý parametr je tzv.
delimitér, pomocí kterého můžeme specifikovat, kde
začíná další slovo. Delimitér je většinou nějaký separátor, tedy
znak, který dělí slova. Ukažme si jednoduchý příklad na funkci
ucwords()
:
$text = "Každé slovo začíná velkým písmenem."; $ucwords = ucwords($text); print($ucwords);
První znak u každého slova bude změněn z malého písmena na velké:
Nyní si vymyslíme textový řetězec, ve kterém chceme slova rozdělovat jiným znakem, než jen mezerou. Pomocí druhého parametru funkce blíže specifikujeme, jakým znakem tedy slova dělíme. Vybereme si tudíž separátor:
$text = "galerie|blog|kontakt"; $ucwords = ucwords($text, '|'); print($ucwords);
Pomocí separátoru funkce správně převede malá písmena na velká. Výstupem na stránku je:
Pokud bychom za každým separátorem slova udělali mezeru, tak znak na začátku slova nebude převeden, výjimkou je však první slovo:
Funkce ucwords()
není multi-byte
safe. Znaky, které nejsou z anglické abecedy a neexistuje pro ně
žádné velké písmeno, nebudou převedeny.
$text = "řeřicha je rostlina"; $ucwords = ucwords($text); print($ucwords);
První znak ř
nebude převeden a výstup na stránce bude:
strtolower()
strtolower()
je funkce, která změní v textovém řetězci
všechna velká písmena na malá. Funkce přijímá pouze jeden
parametr, kterým je textový řetězec. Uveďme si příklad:
$text = "Adam s Alžbětou šli nakupovat do nákupního centra v Plzni."; $strtolower = strtolower($text); print($strtolower);
Všechna velká písmena budou převedena na malá, tedy
Adam -> adam
, Alžbětou -> alžbětou
,
Plzni -> plzni
. Na stránce poté uvidíme:
Funkce strtolower()
není multi-byte
safe. Znaky, které nejsou z anglické abecedy nebudou převedeny.
$text = "Žaneta s Čeňkem bydlí v Českých Budějovicích."; $strtolower = strtolower($text); print($strtolower);
Výsledkem na stránce bude:
Pokud však chceme přidat podporu převodu i jiných znaků,
využijeme multibyte safe funkci mb_strtolower()
,
která přijímá o jeden parametr navíc, do kterého doplníme
kódování.
Ukažme si příklad funkce mb_strtolower()
:
$text = "Byli jsme v autokempu Žíchovec."; $mb_strtolower = mb_strtolower($text, "UTF-8"); print($mb_strtolower);
Všechny znaky v řetězci budou převedeny podle kódování
UTF-8
na malá písmena, tedy Byli -> byli
a
Žíchovec -> žíchovec
:
strtoupper()
Je funkce, která změní všechna malá písmena z anglické abecedy v textovém řetězci na velká. Funkce přijímá pouze jeden parametr, kterým je textový řetězec:
$text = "Koukal jsem se na televizi."; $strtoupper = strtoupper($text); print($strtoupper);
Znaky v našem textovém řetězci budou převedeny na velká písmena,
například televizi -> TELEVIZI
:
Funkce není multi-byte safe. Znaky, které nepatří do anglické abecedy nebudou převedeny.
$text = "Říkali mi, že bych měl častěji chodit ven."; $strtoupper = strtoupper($text); print($strtoupper);
Některé znaky nebudou převedeny:
Avšak stejně jako u funkce strtolower()
existuje
její další varianta s podporou kódování. Multibyte safe funkce
mb_strtoupper()
nám problematiku s diakritikou vyřeší
Ukažme si příklad:
$text = "Pět set korun českých."; $mb_strtoupper = mb_strtoupper($text, "UTF-8"); print($mb_strtoupper);
Za pomocí kódování UTF-8
dostaneme správný převod malých
písmen na velká:
mb_convert_case
Je funkce, která konvertuje znaky v textovém řetězci na velká nebo malá písmena v závislosti na použitém módu. Funkce přijímá 3 parametry. Prvním je náš textový řetězec, druhým parametrem je mód, který rozhodne o konvertování znaků, tedy na velká nebo malá písmena. Třetím parametrem je kódování. Příklady módů a jejich použití najdete na této adrese na této adrese. Funkce je multi-byte safe. Ukažme si příklad:
$text = "Všechny znaky budou velké."; $mb_convert_case = mb_convert_case($text, MB_CASE_UPPER, "UTF-8"); print($mb_convert_case);
Znaky v textovém řetězci budou převedeny na velká písmena pomocí módu
MB_CASE_UPPER
:
Pokud chceme všechny znaky změnit na malá písmena, využijeme módu
MB_CASE_LOWER
:
$text = "Všechny znaky budou malé."; $mb_convert_case = mb_convert_case($text, MB_CASE_LOWER, "UTF-8"); print($mb_convert_case);
Znaky v textovém řetězci budou převedeny na malá písmena:
Tak jako u funkce ucwords()
můžeme změnit znaky na velká
písmena na začátku každého slova, tak u funkce mb_convert_case
je toto možné pomocí módu MB_CASE_TITLE
:
$text = "Každé slovo bude s velkým písmenem."; $mb_convert_case = mb_convert_case($text, MB_CASE_TITLE, "UTF-8"); print($mb_convert_case);
První znak u každého slova v textovém řetězci bude s velkým písmenem:
V následujícím kvízu, Kvíz - Vlastnosti, tagy a nahrazování řetězců v PHP, si vyzkoušíme nabyté zkušenosti z předchozích lekcí.