PHP prakticky/Práce s řetězci
Tato kapitola pojednává o práci s řetězci. Rozumíme tím rozdělování a jiné operace s proměnnými. Pokud stále nechápete, nezbývá než přejít dále.
Zjištění délky řetězce
editovatK tomuto slouží funkce strlen(). Jejím jediným parametrem je řetězec, jehož délku chceme zjistit.
<?php
echo strlen("abcdefgh"); // Vypíše číslo 8
?>
Zjištění pozice řetězce v řetězci (proměnné)
editovatK tomuto slouží funkce strpos(). Jejími parametry je řetězec, v němž chceme hledaný výraz hledat a samozřejmě hledaný výraz. Výstupem funkce je číslo, jež označuje počet znaků od začátku řetězce po začátek hledaného výrazu.
<?php
echo strpos("abcdefgh", "cd"); // Vypíše číslo 2
?>
Získání části řetězce
editovatK tomu slouží funkce substr(). Parametry jsou vstupní řetězec, pozice, od které začíná požadovaný výstup (první znak má nulu, je to tedy počet přeskočených znaků) a délka výstupu (počet přečtených znaků). Je možné také poslední parametr vynechat.
<?php
echo SubStr("abcdefgh", 3, 2); // Vypíše "de"
?>
Práce s řetězci v UTF-8
editovatVšechny výše uvedené funkce ve skutečnosti nepočítají znaky ale počet bytů. Pokud vaše skripty běží pouze na serveru používajícím jednobytové kódování (např. windows-1250
), budete dostávat očekávané výsledky. Při práci s řetězci ve vícebytovém kódování ale nastává problém. UTF-8 (které je výchozím kódováním na linuxových systémech a v současné době je stále rozšířenější i na webu) ukládá různé znaky pomocí jednoho až čtyř bytů; všechny české znaky s diakritikou jsou v něm uloženy pomocí dvou bytů.
V PHP pro práci s vícebytovými řetězci se používají rozšíření iconv nebo mbstring. Následující příklad ukazuje rozdílné výsledky při počítání délky řetězce.
<?php
// tento skript musí být uložený jako UTF-8!
$string = 'ěščř';
echo 'strlen: '.strlen($string); // vypíše 8 (bytů)
echo '<br />mb_strlen: '.mb_strlen($string, 'UTF-8'); // vypíše 4
echo '<br />iconv_strlen: '.iconv_strlen($string, 'UTF-8'); // vypíše 4
?>
Použité kódování můžete uvádět buď při každém volání těchto funkcí, anebo ho můžete nastavit jen jednou pro celý skript:
<?php
mb_internal_encoding('UTF-8');
iconv_set_encoding("internal_encoding", "UTF-8");
echo mb_strlen('ěščř'); // vypíše 4
?>
Výchozí kódování je možné nastavit i v konfiguračním souboru php.ini (viz PHP manuál k iconv, mbstring). Pomocí direktivy mbstring.func_overload
se dá nastavit i to, aby se jednobytové funkce chovaly jako jejich protějšky z rozšíření mbstring, tedy aby počítaly znaky místo bytů. Tato možnost je ale nestandardní, velmi málo používaná a na většině hostingů je proto vypnutá.
Kombinace všech předchozích funkcí
editovatNakonec jen uvedu odkaz na další kapitolu, v níž je vysvětleno nahrazení některých slov v řetězci jinými na příkladu odstranění diakritiky.
◄ PHP prakticky | Práce s řetězci | PHP prakticky/Odstranění diakritiky ► |