Deprecated: Function set_magic_quotes_runtime() is deprecated in /data/www/www_kaspy_cz/textpattern/lib/txplib_db.php on line 14 KAŠPY - PHP BLOG

Menší pomůcka · by Kašpy

Zase sem po několikáté četl na jaknaweb.com příspěvek, kde se ptali , jak zformátovat text pomocí např [podtrhni]nějakej text[/podtrhni]. Je to furt na jedno brdo. Tohle se tam řeší skoro pořád a nikdo ne a ne si to najít v již vložených příspěvcích. Dotyčnému radili, aby použil str_replace, ale to je v tomto případě chyba. Pokud totiž někdo zapomene (nebo schválně) neukončí tag, zformátuje mu to i další text na stránce. Takže řešení je v preg_replace. A kvůli tomu sem udělal tento jednoduchý script, kterej by měl lidem usnadnit práci – sice žádnou práci asi nevynaložili (tedy kromě toho napsanýho dotazu), ale ať to tu je. Adresa je zde

Komentář [4]

Proč máme s UTF-8 problém - autor error414 · by Kašpy

Článek napsal Error414 – by Kaspy sem tam doplňuje – za článek mu tímto děkuji.

UTF-8 je v PHP5 a nižších špatně podporované a při práci sním si musím dát pozor na několik funkcí, které pracují s textem (reg, eregi, plit, strcut, strlen, substr ). Pro práci s UTF-8 (multi-bytové kódovaní) mají tyto funkce ekvivalenty
: mb_ereg, mb_eregi, mb_split, mb_strcut, mb_strlen, mb_substr. Vždy s prefixem mb_ (multi-byte).

Proč ale mají obyčejné funkce s UTF-8 problém? Je to proto že pro interpretaci některých znaků používá UTF-8 více bytů. Pro spodní polovinu ASCII použije jeden byte, pro interpretaci znaků s háčky a čárky použije dva byty.
Můžeme si to vyzkoušet. Použijeme funkci strlen (vrací počet znaků ).


UTF-8
<?php
$delka = strlen('kůň běhá po loukách');
echo $delka;
// vypise 24
?>


ISO 8859-2
<?php
$delka = strlen('kůň běhá po loukách');
echo $delka;
// vypise 19
?>


UTF-8 s funkcí mb_strlen 
<?php
$delka = mb_strlen('kůň běhá po loukách', 'utf-8');
echo $delka;
// vypise 19
?>

Všimněte si že funkce mb_strlen má navíc jeden argument, který určuje jaké kódování jsme použili.

Problém začátečníkům také dělá identifikační byty na začátku textového souboru UTF-8, který vytvořím ve špatně nastaveném editoru. Identifikační byty mají hodnotu EF BB (<). Normálně textový editor tyto byty nezobrazí. Musíme soubor otevřít v hexa editoru .

Výborný nástroj pro práci s UTF-8 je PsPad, který nám dovoluje identifikační byty vypnout. Zobrazit

Práce s UTF-8 není snadná, ale není nemožná stačí si zapamatovat pár problémů, které UTF-8 způsobuje.
V připravované verzi PHP6 má být jako nativní kódování použito UTF-16.

Komentář k článku od autora error414 [7]

POZOR, CO SI VYBERETE · by Kašpy

Není funkce jako funkce. V tomto příkladu ukážu příklad s funkcí str_replace a strtr. Obě slouží k nahrazení textu, ale výsledek Vás může někdy překvapit. Zde je následující příklad.

<?php
$text = "ABCDEF";
	

//Nahradí ABCDEF za FEDCBA
echo str_replace(array("A", "B", "C", "D", "E", "F"), array("F", "E", "D", "C", "B", "A"), $text) . "<br />";

//Nahradí ABCDEF za ABCCBA
echo strtr($text, "ABCDEF", "FEDCBA");
?>

Vysvětlení je následující.
Písmeno->čim se nahradí->výsledný text


A->F->FBCDEF
B->E->FECDEF
C->D->FEDDEF
D->C->FECCEF
E->B->FBCCBF
F->A->ABCCBA

Příště doplnim další funkce, u kterých může nastat takovýto zvrat.

Komentář