čau,
ve své aplikaci používám kódování v UTF-8 - ve skriptech i v databázi. Co se týče zobrazování, vkládání a editace dat, vše funguje bez problému. Při vkládání dalšího záznamu se vždy provede kontrola, zda se tentýž záznam už v databázi nevyskytuje.
Pro porovnání řetězců používám funci mb_strtolower($retezec, "auto"). V manuálu PHP z příkladů vyplývá, že nastavení na "auto" je nutné (znaky anglické abecedy se do databáze vloží v kodovani ASCII, i když je atribut nadefinován jako UTF-8). Mnohokrát proběhlo volání funkce mb_strtolower(), která převádí řetězce na malá písmena, v pořádku. Občas se ale stane, že skript vrátí chybu: Warning: mb_strtolower(): Unable to detect character encoding in JMENO_SCRIPTU.PHP a cislo radku. Prošel jsem kód a určitě v něm chyba není. S touhle chybou si nevím rady.
Samotné potlačení pomocí @ před funkci asi není nejlepším řešením. Setkal jste se s tím někdo.
Jak porovnáváte řetězce v UTF-8. Četl jsem o binárně bezpečném porovnání, ale když jsem ho zkoušel, nefungovalo mi. Předem dík za odpověď.
V manuálu píšou:
This can be handled correctly by:
$str = mb_strtolower($str, mb_detect_encoding($str));
Or if you know your data is UTF-8, just use the string "UTF-8" as the second argument.
Vyzkoušej a uvidíš.
jasně, díky, taky jsem na to koukal. vyzkouším a uvidím. ale to "auto" funguje taky, jen to občas nevyhodnotí vůbec. nevím jestli to závisí na zatížení systému nebo na něčem jiném.