Problemy z funkcjami.
Podczas niedawnych prac nad kursem dotyczÄ…cym integracji systemów pÅ‚atnoÅ›ci internetowych ze stronÄ… WWW natknÄ…Å‚em siÄ™ na wadliwe dziaÅ‚anie funkcji htmlentities(). Problem polegaÅ‚ na tym, że ciÄ…gi znaków zakodowane w UTF-8 pomimo przesÅ‚ania do funkcji informacji o kodowaniu, miaÅ‚y zamieniane litery ‘ó’ oraz ‘Ó’ na encje ‘ó’ oraz ‘Ó’. Sprawa wyglÄ…da dosyć dziwnie, bo szukajÄ…c informacji o tym bÅ‚Ä™dzie natknÄ…Å‚em siÄ™ na kilka dyskusji i podobne problemy napotkali też inni programiÅ›ci, ale niekoniecznie dotyczyÅ‚y one tych samych liter.
Rozwiązanie problemu jest oczywiście dosyć proste. Należy encje zamienić z powrotem na odpowiedni litery. Należy przy tym pamiętać, by plik z kodem był również zakodowany w UTF-8.
<?php $value=htmlentities($value, ENT_COMPAT, 'UTF-8'); $value=str_replace(array('ó', 'Ó'), array('ó', 'Ó'), $value); ?> |
Funkcja str_replace() zamienia w zmiennej $value fragmenty z tablicy, która jest pierwszym argumentem tej funkcji na elementy tablicy, która jest argumentem drugim.
Z kolei wczoraj, konfigurując portal pewnej szkoły zauważyłem, że w pewnych miejscach polskie znaki również nie wyświetlają się poprawnie. Przeglądarka poprawnie interpretowała kodowanie strony, również w bazie danych wszystkie napisy były zapisane prawidłowo. Po bliższym przyjrzeniu się problemowi, winowajcą okazała się funkcja strtolower() zmieniająca wszystkie znaki na małe. Funkcja ta również nie radziła sobie z kodowaniem UTF-8. W tym przypadku jednak znalazł się zamiennik: funkcja mb_strtolower(). Jej użycie dla tekstów kodowanych w UTF-8 wygląda następująco
<?php $tytul=mb_strtolower($tytul, 'UTF-8'); ?> |
Tagi: echo, foreach, funkcje, htmlentities(), mb_strtolower, PHP, strtolower(), str_replace(), UTF-8