Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> KODOWANIE ZNAKÓW UTF-8, PHP + MYSQL
smarcz
post 16.09.2007, 16:26:12
Post #1





Grupa: Zarejestrowani
Postów: 80
Pomógł: 0
Dołączył: 12.05.2005

Ostrzeżenie: (0%)
-----


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

Ten post edytował smarcz 16.09.2007, 16:28:01
Go to the top of the page
+Quote Post
kris2
post 16.09.2007, 18:13:19
Post #2





Grupa: Zarejestrowani
Postów: 150
Pomógł: 3
Dołączył: 15.08.2007

Ostrzeżenie: (0%)
-----


zawsze używaj UTF-8 to ma same plusy winksmiley.jpg

skoro wszystko bedzie w UTF-8 to nie potrzeba żadnej konwersji!
Go to the top of the page
+Quote Post
Blodo
post 16.09.2007, 18:57:23
Post #3





Grupa: Zarejestrowani
Postów: 51
Pomógł: 1
Dołączył: 1.02.2005

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
Kicok
post 17.09.2007, 09:00:14
Post #4





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

Ostrzeżenie: (0%)
-----


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ą


--------------------
"Sumienie mam czyste, bo nieużywane."
Go to the top of the page
+Quote Post
smarcz
post 18.09.2007, 17:38:23
Post #5





Grupa: Zarejestrowani
Postów: 80
Pomógł: 0
Dołączył: 12.05.2005

Ostrzeżenie: (0%)
-----


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()

Ten post edytował smarcz 18.09.2007, 11:15:47
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 22.05.2025 - 03:43