Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: KODOWANIE ZNAKÓW UTF-8
Forum PHP.pl > Forum > PHP
smarcz
Chciałbym tym tematem rozpocząć dyskusję na temat właściwego kodowania pisanych stron czy kodowanie za pomocą iso-8859-2 czy UTF-8.

Bardzo wielu z nas posługuje się konwersją iso-8859-2 - ale przy tym zastosowaniu pojawia się wile problemów.

Proszę zamieszczać odpowiedzi dotyczące:
1) Właściwego sposobu kodowania w php
2) Właściwego sposobu zapisywania treści do baz danych - jaką konwersją
3) Odczytywanie lub przekonwertowanie starych wpisów do baz za pomocą ISO na UTF (i odwrotnie jeżeli by ktoś chciał)
4) Jak kodować same znaki do UTF aby właściwie się wyświetlały - czego używać
5) Jakie meta tagi używać i czy stosować header()?

Myślę że każdy z nas boryka się z takimi problemami, tak więc piszcie i zadawajcie kolejne pytania.

Mam nadzieję, że wielu z nas odnajdzie w tym temacie wiele istotnych informacji
kris2
zawsze używaj UTF-8 to ma same plusy winksmiley.jpg

skoro wszystko bedzie w UTF-8 to nie potrzeba żadnej konwersji!
Blodo
Jesli korzystasz z utf8 i mysqla, upewnij sie ze masz wersje mysqla 4.1 lub wyzsza - wtedy wspolpraca jest o wiele latwiejsza bo mysql za ciebie cala konwersje robi i nie musisz sie martwic czy dany serwer ma iconv wlaczone czy nie. Pomocne jest to rowniez jak masz stary text np. w iso-8859-2.

Jak uzyjesz na stronie <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> to to wystarczy. Nie musisz potem headerow uzywac, ale jezeli przechowujesz text z tzw. "krzaczkami" w pliku php, nie zapomnij go zakodowac jako utf8 w swoim edytorze.

Jesli tylko wyswietlasz tekst z bazy bez przetwarzania go, to nie musisz sie martwic mbstring. Jezeli jednak zamierzasz go przetwarzac i wiesz ze na twoim serwerze nie ma mbstring, zawsze mozesz uzyc php utf8.

To tyle odemnie.
Kicok
Spotkałem się z serwerami, które domyślnie wysyłały nagłówek:
Kod
Content-Type: text/html; charset=iso-8859-1


Zastosowanie w takim przypadku tagu <meta niewiele dawało, bo dla przeglądarki ważniejsze były informacje z nagłówka. Dlatego IMHO warto poświęcić tą jedną dodatkową linijkę kodu na:
  1. <?php
  2.  
  3. header( 'Content-Type: text/html; charset=utf-8' );
  4.  
  5. ?>

żeby w razie czego nadpisać domyślny Content-Type.


No i jeśli zamierzamy kodować w UTF-8 to wypadałoby się o nim czegoś dowiedzieć, np. że niektóre edytory wstawiają na początku pliku BOM, który PHP traktuje jako zwykły tekst.
Albo że znaki zakodowane w UTF-8 są zapisywane pod zmienną ilością bajtów. Dzięki temu nie będziemy ślęczeli godzinami nad problemem typu:
  1. <?php
  2.  
  3. // Plik zapisany w UTF-8
  4.  
  5.  
  6. $test = 'ąąą';
  7.  
  8. echo strtr( $test, 'ąć', 'ac' ); // Zamienia nam jeden znak "ą" na dwa znaki "ac" o_O
  9. echo strtr( $test, array( 'ą' => 'a', 'ć' => 'c' ) ); // A ten zapis działa poprawnie
  10.  
  11. ?>



Ponoć PHP6 ma być bardziej UTF8-friendly. Zobaczymy, może problemy jak ten powyższy z strtr" title="Zobacz w manualu PHP" target="_manual znikną
smarcz
No dobrze, ale co w przypadku gdy ktoś ma napisany cały kod serwisu i jest on zakodowany ISO a nie UTFem. Jak przekonwertować wszystkie pliki. Czy wystarczy wstawić same znacznik <meta http-equiv="Content-Type" content="text/html; charset=utf-8">?

Chyba nie? Kodowanie znaków jest inne - czym to wykonać - jakiś program - do ISO są gotowe klawiatury pod windowsa automatycznie zmieniające polskie znaki na właściwie zakodowane a co z UTFem w takim przypadku?

Czym się posługiwać.

Proszę o jasne wyjaśnienia z czego skorzystać - jakie narzędzia?

Może jakieś własne pomysły przekodowywania znaków za pomocą php?

Dziękuję i proszę o włączanie się do dyskusji.

Co sądzicie o edytorze Pajączek do pisania właśnie za pomocą UTFa - ma on podobno konwerter znaków?

Musze zaznaczyć, że w moim przypadku właściwe kodowanie w UTFie otrzymałem dopiero po zastosowaniu nagłowka header()
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.