różne kodowania php
początkujący autorzy skryptów nie dbają o kodowanie. Dlatego na stronach można czasem znaleźć straszny bałagan, gdy dane z bazy danych są uzyskiwane w jednym kodowaniu, strona jest tworzona w innym, a serwer otrzymuje trzeci. w rezultacie, jeśli strona może zostać odszyfrowana, to przynajmniej 2 razy. Dlaczego więc taki problem występuje i jak go pokonać?
w segmencie rosyjskim najczęściej można znaleźć tak zwane kodowanie okien. nazwij to inaczej: windows-1251, cp1251 lub nawet ansi. następny to utf-8. Możesz również znaleźć nazwę unicode, ale nie jest to całkowicie poprawne, ponieważ Unicode jest ogólną nazwą całej grupy (utf-8, utf-16, utf-32). a bardzo popularną rzadkością jest koi8-r lub po prostu koi-8 - niegdyś popularne kodowanie Linuksa. Oczywiście w rosyjskim segmencie można spotkać coś innego, ale autor to raczej „odpust”.
© - & copy;
Oprócz tego, że każda taka postać jest opisywana przez grupę znaków, kod staje się nieczytelny, a praca z tekstem staje się bardziej skomplikowana. w tym miejscu ratuje wielobajtowy utf-8. bardzo wygodne jest używanie liter różnych alfabetów i różnych symboli w jednym tekście.
Zatem najwygodniejszy zestaw warunków początkowych jest następujący: kodowanie bazy danych, skryptów php i skryptów html / js powinno być takie samo. Oczywiście możesz używać różnych, ale w tym przypadku istnieje ryzyko pomylenia. nie ma znaczenia, która strona kodowa jest używana. jeśli witryna jest przeznaczona tylko dla odbiorców rosyjskojęzycznych, system Windows-1251 będzie wystarczający. w przeciwnym razie utf-8 byłby logicznym wyborem. pierwsza opcja jest mniej lub bardziej wyraźna. kodowanie wielobajtowe będzie wymagało pewnych gestów.
Podczas pracy z utf-8 standardowy notatnik notatnika nie będzie działał ! Faktem jest, że ten edytor, podczas zapisywania pliku w tym kodowaniu, dodaje podpis do początku - 3 znaki, tak zwany bom (znak kolejności bajtów), który może być użyty do określenia kodowania podczas otwierania pliku. lepiej wybrać inny edytor: notatnik2 lub notatnik ++ . w ustawieniach musisz wybrać zapisywanie bez podpisu.
Kolejnym ważnym krokiem jest praca z bazą danych. Jest wysoce pożądane, aby kodowanie pola base / table / text pasowało do kodowania skryptu (może to być cp1251 lub utf-8 lub coś innego). jeśli dane z bazy danych są uzyskiwane w formie „zyuk”, najprawdopodobniej kodowanie połączenia różni się od danych przechowywanych w bazie danych. Następujące zapytanie pomoże przezwyciężyć sytuację (wykonać natychmiast po połączeniu z bazą danych):
jeśli strona używa Windows-1251, należy ją określić - cp1251.
ogólnie rzecz biorąc, nie ma nic trudnego. tylko standardowe funkcje php nie są przeznaczone do pracy z ciągami wielobajtowymi. ale istnieją standardowe biblioteki, które pomogą poprawić sytuację: iconv i mbstring . w przypadku wyrażeń regularnych istnieje również niezbędny przełącznik, który jest aktywowany za pomocą modyfikatora u .
Cóż, dane z bazy danych są uzyskiwane, skrypty są zapisywane zgodnie ze wszystkimi regułami. Pozostaje wysłać prawidłowy tytuł i wyświetlić kod strony w przeglądarce użytkownika. wysyłamy nagłówek tak:
header ('Content-Type: text / html; charset = utf-8');
jeśli używane jest kodowanie jednobajtowe, wartość zestawu znaków będzie inna - windows-1251 . Po tym problemy nie powinny pozostać.
Najprostsze przykłady pracy z utf-8 w php:
przykład 1: iconv, liczba znaków w linii
$ s = 'string'; # ciąg w utf-8 $ cnt1 = strlen ($ s); # będzie zawierać wartość 12 $ cnt2 = iconv_strlen ($ s, 'UTF-8'); # poprawna wartość, 6
przykład 2: mbstring, liczba znaków w ciągu
$ s = 'string'; # ciąg w utf-8 $ cnt1 = strlen ($ s); # będzie zawierać wartość 12 $ cnt2 = mb_strlen ($ s, 'UTF-8'); # poprawna wartość, 6
przykład 3: wyrażenia regularne, szukaj i zamień
$ s = 'String'; # line w utf-8 $ s = preg_replace ('/ p / i', 'd', $ s); # zastąpienie nie nastąpi $ s = preg_replace ('/ p / iu', 'd', $ s); # wynik słowa dok
modyfikator i określa wyszukiwanie bez rozróżniania wielkości liter, a modyfikator u mówi silnikowi wyrażeń regularnych, aby pracował z ciągami utf-8.
jeśli ktoś powie, że php nie może działać z utf-8, będzie źle. Od kilku lat wykonuję wszystkie moje projekty w tym kodowaniu i nie było żadnych problemów. Wyszukiwarki same od dawna używają tego wspaniałego kodowania.
Wydawca
offline 11 godzin
x64 (alias andi)
Komentarze: 2846 Publikacje: 395 Rejestracja: 02-04-2009
Dlaczego więc taki problem występuje i jak go pokonać?