Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP]Zmiana kodowania bazy w zależności od tabeli
thek
post 7.09.2009, 15:21:18
Post #1





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Witam.
Obecnie w pracy siedzę od jakiegoś już czasu i kombinuję jak w locie konwertować przesyłane mi między skryptem a bazą dane. Problem niby z działu Przedszkole (temat kodowania jest nawet przyklejony). Problem polega na jednym szczególe. A wiadomo, że diabeł tkwi w nich.

Mianowicie przyszło mi przerobić szablon strony i zrobiłem to dla uniwersalności kodując całość w UTF-8 (takie wewnętrzne kodowanie plików, jak i odpowiednie oznaczenie w meta). Gdyby baza była również w utf-8 to problemu nie ma, ale niestety tak nie jest. Ktoś podczas zakładania pomieszał w konfigu i mam taki Sajgon:
Baza: utf-8,
System porównywania: latin1_swedish_ci
Tabele wewnątrz z charsetem: latin1

No to kombinowałem i najbliższy prawidłowego wyświetlania jest układ:
mysql_query("SET NAMES utf8");
mysql_query("SET CHARACTER SET utf8"); oraz latin1
mysql_query("SET collation_connection = latin1_swedish_ci");

Tyle że wyrzuca on teksty z kodowaniem wyglądającym jak ASCII:
Ksi??ki i filmy o tematyce sportowej - instrukta?owe, dokumentalne

No to postanowiłem dodatkowo użyć iconv. Tyle że to także nie daje rezultatów.
  1. $nazwa = iconv('ISO-8859-1', 'utf-8', $row['nazwa']);

Próbowałem ustawiać różne kombinacje. Poprzez konkretne ISO, nazwy latin1, latin2.
W końcu nawet zacząłem ustawiać także wartości poprzez zdefiniowane doń funkcje:
  1. iconv_set_encoding("internal_encoding", "UTF-8");
  2. iconv_set_encoding("input_encoding", "ISO-8859-1");
  3. iconv_set_encoding("output_encoding", "UTF-8");
Też bez rezultatu. Wciąż brak polskich odpowiedników.

Jest mi to niestety potrzebne, bo w przygotowaniu stoją kolejne 2 bazy, a tam jest już nawet nie Sajgon, ale Wojna światowa, bo różne tabele w tej samej bazie mają różne collations.

Co jeszcze dziwniejsze. Gdy nie zrobię zmian nigdzie przy połączeniu z baza i nie zastosuję iconv (czyli strona w utf-8 pobiera dane tak jak są w bazie i po prostu je wyświetla nie operując na nich), to poprzez zmianę kodowania w przeglądarce z rozpoznanego utf-8 na iso-8859-2 to co pobrałem z bazy zostaje przekodowane na prawidłowe polskie znaki, ale reszta strony napisana w utf-8 oczywiście sypie krzakami. W ten sposób zgłupiałem bo nie mogę w końcu określić czy baza ma utf-8, ASCII, iso-8859-1 czy może iso-8859-2 blinksmiley.gif

Dla mnie logicznym jest, że w takim wypadku powinienem użyć iconv, ale pytanie w takim wypadku powstaje: "Jakich kodowań jako parametry użyć?. Wyjściowy na bank utf-8. Kombinacje jakich użyłem dają:
ISO-8859-2 -> utf-8: standardowe pytajniki w rombach;
ISO-8859-1 -> utf-8: standardowe pytajniki w rombach;
ascii -> utf-8: standardowe pytajniki w rombach;
Kto widzi jakieś inne kombinacje dla rozwiązania tego problemu niech da znać smile.gif

Ten post edytował thek 7.09.2009, 15:26:33


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
potreb
post 7.09.2009, 16:29:47
Post #2





Grupa: Zarejestrowani
Postów: 1 568
Pomógł: 192
Dołączył: 7.03.2005
Skąd: Warszawa

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


Wiesz, niedawno miałem problem z kodowaniem, admin wkońcu po 20 latach zaktualizował serwer php 5 i mysql 5, a tabele miałem w swedish_ci a kodowanie ustawione na utf, jak nie chcesz się za przeproszeniem piep... pozmieniaj kodowanie w tabelach przy pomocy Mysql Gui Tools


--------------------

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: 12.06.2025 - 21:33