Witam,
tworzę właśnie malutki portal i napotkałem pewien problem. Otóż napisałem sobie funkcję:
function lower_latin($string) {
$polish_chars = array(' ', 'ą', 'ć', 'ę', 'ł', 'ń', 'ó', 'ś', 'ź', 'ż');
$latin_chars = array('_', 'a', 'c', 'e', 'l', 'n', 'o', 's', 'z', 'z');
$string = mb_strtolower($string, 'UTF-8');
$string = str_replace($polish_chars, $latin_chars, $string);
return $string;
}
Ma ona za zadanie zamienić string'a na łańcuch małych liter bez polskich znaków oraz z znakami '_' zamiast spacji. Przykładowo łańcuch: AbĆef ogsłÓc - ma zamienić na: abcef_ogsloc.
Gdy pobieram z bazy danych jakąś wartość, np.: 'Wilczór' to po przepuszczeniu przez funkcję prawidłowo zostaje on zamieniony na ciąg 'wilczor'. Niestety gdy pobieram jakąś wartość poprzez formularz i nastepnie przepuszczam ją poprzez funkcję to zamienia ona wszystkie znaki na podane odpowiedniki poza literką 'ó'. Efekt dla powyższego były następujący (gdy wprowadzam w formularzu AbĆef ogsłÓc): abcef_ogslóc. W bazie literka 'ó' zapisuje się jako 'ó'. Co może być powodem? Oczywiście UTF-8 bez BOM wszędzie ustawione.