text
Práce s řetězci v PHP
Většinu informací,s kterými v PHP pracujeme jsou textové řetězce.
Textové řetězce a UTF-8
Část PHP funkcí pro práci s řetězci začíná prefixem
mb_. Je to z toho důvodu, že tyto funkce podporují UTF-8 kódování (MB jako MultiByte).
V kódování UTF-8 se píše naprostá většina webů, protože umí většinu znaků většiny národních abeced.
Funkce bez prefixu mb_ nikdy nepoužívejte, jelikož neumí UTF-8 tak budou vracet špatný výstup.
Nejprve musíme nastavit kódování, jinak nebudou korektně fungovat.
mb_internal_encoding("UTF-8")
Spojování textu
Spojování retězců se prování pomocí operátoru
. (tečka).
<?echo "Začátek spojím s ".$proměnou."a s koncem"?>
Nahrádí část textu za jiný.
str_replace ($search, $replace, $subject ,$count])
$search |
co chceme najít |
$replace |
čím to chceme nahradit |
$subject |
řetězec, se kterým chceme pracovat (který chceme upravit) |
$count |
lze zadat proměnnou, do které se uloží počet provedených nahrazení |
echo str_replace("číslo", "tři", "Zobraz číslo"); //vypíše 'Zobraz tři'
Nahrazení podle slovníku.
Funkce se často používá k nahrazení textových smajlíků v nějakém textu za HTML obrázky.
$slovnik = array(
':)' => '',
':D' => '',
);
echo strtr('Ahoj :) Toto jsem opsal z devbooku :D', $slovnik);
Zjištění délky řetězce.
$delka = mb_strlen("kolik"); //v proměnné $delka bude hodnota 5
Získá z řetězce jeho konkrétní část.
Má tři parametry, pokud nezadáme třetí, je vráceno vše až do konce.
substr ($string, $start , $length)
$string |
zdrojový řetězec |
$start |
od kterého znaku chceme začít podřetězec |
$length |
délka podřetězce, který chceme vrátit (pokud nezadáme, je vráceno vše až do konce) |
echo mb_substr("abcdefgh",2,5); > //vypíše 'cdefg'
echo mb_substr("abcdefgh",2); > //vypíše 'cdefgh'
Odstraní
ze začátku a z konce zadaného řetězce prázdné znaky (mezery, tabulátory, zalomení řádky...) .
Pokud je zadán druhý parametr odstraní se
ze začátku a z konce jen zadané znaky.
$text = trim($zdroj); //odstraní prázdné znaky z konců řetězce
$text1 = trim($zdroj,"\n\r\t 0y"); //odstraní nové řádky,tabulátory, mezery, nulu a písmeno y
Převéde řetězec na malá či velká písmena.
echo strtolower('aBc'); //vypíše abc
echo strtoupper('aBc'); //vypíše ABC
Zjistí na jaké pozici se v řetězci nachází konkrétní podřetězec nebo zda text podřetězec obsahuje.
Funkce vrací 0 v případě, že je podřetězec na první pozici a false v případě, že nebyl nalezen.
Z tohoto důvodu je nutné výsledek porovnávat i s ohledem na datový typ.
Jinak by bylo false a 0 vyhodnoceno stejně a podřetězec by nebyl nalezen v případě, že by jím řetězec začínal.
$retezec = mb_strtoupper('Ahoj čau bay');
$podretezec = mb_strtoupper('Čau');
if (mb_strpos($retezec, $podretezec) !== false)
echo "Nalezeno";
else
echo("Nenalezeno");
echo mb_strpos($retezec, $podretezec); // vypíše 5
echo ucfirst("ahoj jak se máš") // první velké písmeno řetězce - vypíše "Ahoj jak se máš"
echo ucwords ("ahoj jak se máš") // každé slovo v řetězci velké písmeno - vypíše "Ahoj Jak Se Máš"
Z textu odstraní HTML tagy. Ochrana např. proti vložení do komentáře javascriptu, který zajišťuje
automatické přesměrování útočníka na jeho vlastní web.
Jako první parametr zadáváme řetězec, který chceme upravit, jako druhý lze zadat seznam tagů, které
se mají v textu ponechat (font strong atd.).
$text = strip_tags($retezec,'<font><strong>');
Převode speciální HTML znaky na jejich entity( <,>,& a uvozovky).
Má tři parametery:
První je
$řetězec na úpravu.
Druhý mění chování funkce. Můžeme je spojovat pomocí |.
Zde jsou tři základní:
ENT_COMPAT |
Převede uvozovky a apostrofy ponechá. |
ENT_QUOTES |
Převede uvozovky i apostrofy. |
ENT_NOQUOTES |
Ponechá uvozovky i apostrofy. |
Třetí je
kódování.
$text = htmlspecialchars($retezec,ENT_QUOTES,"cp1251");
Rozdělit řetězec na jednotlivé části dle zadaného oddělovače.
explode($oddelovac, $string, $limit)
$oddelovacr |
oddělovač jednotlivých částí |
$string |
řetězec, který chceme rozdělit |
$pole = explode (',', "ahoj,bay,čau"); //vytvoří pole s hodnotami ahoj, bay, čau
$vstup = "1,5,87,65,42,4,456,8,5,98,54,89";
$cisla = explode(',', $vstup);
echo array_sum($cisla); //vypíše součet 914
Funkce implode slouží opačnému účelu, než explode. Jako parametry jí předáváme spojovací řetězec a pole, které chceme spojit.
$pole[0] ="ahoj" ;
$pole[1] ="čau" ;
$pole[2] ="bay" ;
echo implode (", ",$pole)
Otočí pořadí dat v řetězci.
echo strrev ("abcd); vypíše "dcba"