2011-09-15 12:22:56

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('&oacute;', '&Oacute;'), 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: , , , , , , , ,

Dodaj odpowiedź

Musisz się zalogować aby dodać komentarz.