Lekce 16: Stringy II
- Zde je druhý díl pro práci se stringy. Takže stejně tak jako v prvním díle, si i zde představíme několik příkazů, které nám mohou ulehčit práci.
- První funkcí, kterou bych vám ukázal bude strpos(), která hledá pozici prvního výskytu řetězce.
- Funkce má 3 parametry, kde první je string, ve kterém se má hledat, druhý je string, který hledám a třetí je offset.
$text = "Dnes je super den"; $hledam = "super"; // slovo "super" tak existuje, tak vypise "Je tam: super" if (strpos($text, $hledam) !== false) echo "Je tam: ".$hledam; // ten sami zapis if (!strpos($text, $hledam) === false) echo "Je tam: ".$hledam;Pozor: Tato funkce porovnává i typ, takže je nutné použít !==.
$text = "Dnes je super den"; $hledam = "u"; // vypise OK, protoze pismeno "u" je na 10 pozici a my zaciname od 9 if (strpos($text, $hledam, 9) !== false) echo "OK"; // nevypise nic, protoze hledame az od 10 pozice (tj. 11+) if (strpos($text, $hledam, 10) !== false) echo "OK";- Jako další funkci bych představil substr(), která vrací část stringu.
echo substr("soubor.exe", -3); // vypise "exe" (vezme posledni 3 znaky)
echo substr("soubor.exe", 0, 6); // vypise "soubor" (vezme prvnich 6 znaku)
- Zde není moc co dodat. Ukážu ještě pár příkladů a jen připomenu, že pokud startovní pozice je záporná, tak začínáme v textu od zadu.
// krajeni textu ze predu
echo substr("a10_b20_c30", 0, 3); // a10
echo substr("a10_b20_c30", 1, 2); // 10
echo substr("a10_b20_c30", 4, 3); // b20
echo substr("a10_b20_c30", 5, 2); // 20
echo substr("a10_b20_c30", 8, 3); // c30
echo substr("a10_b20_c30", 9, 2); // 30
// krajeni textu zezadu
echo substr("a10_b20_c30", -3); // c30
echo substr("a10_b20_c30", -2); // 30
echo substr("a10_b20_c30", -7, -4); // b20
echo substr("a10_b20_c30", -6, -4); // 20
echo substr("a10_b20_c30", -11, -8); // a10
echo substr("a10_b20_c30", -10, -8); // 10
// ostatni moznost pro rozdeleni textu
echo substr("a10_b20_c30", 0); // a10_b20_c30
echo substr("a10_b20_c30", 4); // b20_c30
echo substr("a10_b20_c30", 8); // c30
echo substr("a10_b20_c30", -7); // b20_c30
- Jako další užitečná funkce bude wordwrap(). A jak už název říká, tak tato funkce slouží na zalomení textu.$text = "Rozbity bagr"; // text // vypise: "Rozbity- Tady vidíte, že jakmile je slovo delší, než 4 znaky, tak ho napíše celé a na jeho konci aplikuje teprve nový řádek. Aby jsme tomu zabránili a rozdělili slovo, i když bude delší, tak k tomu slouží poslední parametr, který ignoruje délku slova.
Bagr" echo wordwrap($text, 4, "
"); // za kazdy 4 znaky prida
$text = "Rozbity bagr"; // text // vypise: "Rozb- Všimněte si, že se zde berou i mezery, proto za "ity " je mezera.
ity
bagr" echo wordwrap($text, 4, "
"); // opet za kazdy 4 znaky prida
$text = "Rozbity bagr"; // text echo wordwrap($text, 2, "-", true); // Ro-zb-it-y-ba-gr- Opět zde vidíme, že za "y" je hned pomlčka místo mezery, protože tam bývala mezera.
// trochu delsi cislo $cislo = "1234567890123456789012345678901234567890123456789012345678901234567890"; /* vypise: * 123456789012 * 345678901234 * 567890123456 * 789012345678 * 901234567890 * 1234567890 */ echo wordwrap($cislo, 12, "- Tento poslední příkaz nejde použít bez zalomení textu (poslední parametr), protože text neobsahuje žádné mezery.
", true); // za kazdych 12 znaku da novy radek
// vystup bude vypadat: "<a href="#">neco</a>"
echo htmlspecialchars('neco');
- Tohle nám způsobí, že na webu se neukáže výstup HTML, ale jako pouhý text (tak jak ho vidíme).$html = ''; echo htmlspecialchars($html, ENT_COMPAT); // naprosto stejne i bez flagu echo htmlspecialchars($html, ENT_QUOTES); // naprosto stejne i bez flagu echo htmlspecialchars($html, ENT_NOQUOTES); // ponecha vsechny uvozovky i apostrofy echo htmlspecialchars($html, ENT_IGNORE); // tez ponecha vsechny uvozovky i apostrofy- Nyní si ukážeme třetí parametr, který udává znakovou sadu. Pojďme si tedy ukázat možné sady pro převod.
echo htmlspecialchars(">", ENT_NOQUOTES, null); // &gt;
echo htmlspecialchars(">", ENT_NOQUOTES, null, false); // >
- Opakem těchto funkcí je funkce html_entity_decode(), která převádí zpět všechny HTML entity do znaků.// rekneme, ze budeme mit nejakou URL kde bude tento dotaz $url = "id=members&page=12&user=admin&ip=10.20.30.40"; parse_str($url); // rozdelime text a vytvorime promenne echo $id; // members echo $page; // 12 echo $user; // admin echo $ip; // 10.20.30.40- Pokud zadáme druhý parametr pro referenční pole, tak se proměnné nevytvoří, ale zapíší se do pole. To znamená, že budeme volat hodnoty přes jednu proměnnou pomocí indexu.
$url = "id=members&page=12&user=admin&ip=10.20.30.40"; parse_str($url, $u); echo $u["id"]; // members echo $u["page"]; // 12 echo $u["user"]; // admin echo $u["ip"]; // 10.20.30.40- Na parsování URL máme však jinou funkci, která se na to hodí nejlépe a to parse_url().
// budeme mit treba takovou URL $url = "http://admin:password@mujweb.cz:80/cesta?args=hodnota#neco"; $pole = parse_url($url);- Nyní nám proměnná $pole ukazuje toto:
array 'scheme' => string 'http' 'host' => string 'mujweb.cz' 'port' => int 80 'user' => string 'admin' 'pass' => string 'password' 'path' => string '/cesta' 'query' => string 'args=hodnota' 'fragment' => string 'neco'- Takže není už problém si zavolat přesně to, co potřebujem. Třeba uživatele a heslo.
echo $pole["user"]; // admin echo $pole["pass"]; // password- Druhý parametr označuje komponentu, kde si můžeme přesně říct, co chceme získat. Takže se nepřevádí celá URL do pole, ale vratí se pouze ten string.
echo parse_url($url, PHP_URL_USER); // admin echo parse_url($url, PHP_URL_PASS); // password
- Vše potřebné jsem napsal, takže si stačí pouze opakovat.