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

editovat

K 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é)

editovat

K 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

editovat

K 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

editovat

Vš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í

editovat

Nakonec 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 ►