Polskie znaki w PHP/MySQL

0

Mam baze danych mysql. Metoda porownywania napisow w tabeli to utf8_general_ci. Kodowanie mojej stronki to utf-8.

Niestety, kiedy probuje cos wyszukac w bazie i wyswietlic wyniki na stronce, polskie znaki zawsze mi sie wykrzaczaja :| Moglby mi ktos wyjasnic o co tu chodzi?
Po wykonaniu zapytania w phpMyAdmin polskie litery sa wyswietlane normalnie, co moge robic zle?

0

u mnie jest tak ze jak dodam coś przez forumarz na stronce (ktora ma utf-8) to jest ok, a tylko jak dodam przez phpmyadmin'a to wyswietlaner sa znaki zapytani..

wniosek? dodawaj dane ze skryptu a nie phpmyadminem

0

Niestety to nie jest takie proste, ja nie dodaje tych danych, tylko mam juz gotowa baze danych, przekonwertowana z MsAccess.

Moze podam niektore parametry pokazywane przez pypMyAdmin (nie wiem, czy wszystkie sa wazne):

  • Metoda porownywania napisow w tabeli: utf_8_general_ci
  • Metoda porownywania napisow dla calej bazy: latin1_swedish_ci (??)
  • typ tabeli: InnoDB

Nie moge zrozumiec, dlaczego skad sie biora problemy skoro kodowanie w bazie jest utf-8, moja stronka tez ma utf-8. No i skad u licha sie bierze to latin1_swedish_ci ??

Dane pobieram z bazy standardowo... a moze jeszcze powinienem dopisac cos w kodzie?

0

No bo problem w tym, że kodowanie w MySQL'u domyślnie nie jest UTF. Możesz spróbować napisać jakiś skrypt kodujący odpowiednio (pobrać dane z tabeli, przekonwertować na UTF-8, po czym zapisać od nowa). A nawet, jeśli kodowanie w bazie danych jest ustawione na UTF-8, to MSAccess jest produktem Microsoft'u, więc olewa światowe standardy i używa swojego kodowania WIN-Zgadnij_sobie_numerek. W związku z tym jak generuje wyeksportowaną bazę to tworzy ją w tymże dzikim kodowaniu i wykonanie poleceń SQL bezpośrednio niezależnie od bazy danych wszystko chrzani. Dopiero po przerobieniu przez skrypt/przeglądarkę na odpowiednie kodowanie zadziała. Za to PHPMyAdmin wyświetla Ci dobrze, bo on też nie używa UTF-8.

0

pobrać dane z tabeli, przekonwertować na UTF-8, po czym zapisać od nowa
Ale jak? Jestem dosc poczatkujacy w tym, moze jakis kawalek kodu jak to sie robi...?

Sprobowalem zrobic cala stronke z kodowaniem Windows i nie pomoglo :| Tylko litera "ó" jest wyswietlana dobrze, reszta to znaki zapytania :/

Chcialem zobaczyc jak phpMyAdmin to robi, ze wyswietla dobrze - kodowanie strony to utf-8 (mozna sprawdzic w przegladarce), a mimo to po wpisaniu zapytania polskie znaki sa wyswietlane poprawnie - niestety jestem chyba jeszcze za slaby zeby cokolwiek zrozumiec z tego kodu :|

0

ja z problemem poradziłem sobie "na chama" - sciągnąłem chyba z 4pro program do konwersji danego kodowania na inne i po kilku małych modyfikacjach, nie wymaga podania kodowania "wejściowego"... Działa to tak, że z bazy wczytuje ISO, ze skryptów PHP WinSzajze lub UTF (zależy, czy robiłem dany plik na Win98, czy XP), potem wszystko przerabia na UTF, a następnie już normalnie na to, co chcę :)

konkretnie - skrypt przerabia tylko polskie znaki, inne całkowicie ignoruje :P

0
othello napisał(a)

pobrać dane z tabeli, przekonwertować na UTF-8, po czym zapisać od nowa
Ale jak? Jestem dosc poczatkujacy w tym, moze jakis kawalek kodu jak to sie robi...?

Do odczytywania z bazy danych po prostu SELECT * (no chyba, że masz tyle tabel, że nie bardzo masz jak je wpisać, to może być kłopot)
Do konwersji jest na necie multum skryptów, nic samemu takiego nie pisałem - nie ma takiej potrzeby. Kiedyś znalazłem jakiś kombajn radzący sobie z każdym znanym mi kodowaniem i działa :].
Do zapisywania najlepiej chyba w pętelce while($row=mysql_fetch_array($result)) robić zapytania typu INSERT z przekonwertowanymi danymi. To chyba najprostsze rozwiązanie (aczkolwiek nie mówię, że nie jedyne, bo bym skłamał).

othello napisał(a)

Chcialem zobaczyc jak phpMyAdmin to robi, ze wyswietla dobrze - kodowanie strony to utf-8 (mozna sprawdzic w przegladarce), a mimo to po wpisaniu zapytania polskie znaki sa wyswietlane poprawnie - niestety jestem chyba jeszcze za slaby zeby cokolwiek zrozumiec z tego kodu :|

Akurat phpMyAdmin sobie konwertuje to do takiego kodowania jakie tam sobie chce, ale nie zapisuje w bazie w UTF-8. Wiem z własnego doświadczenia, że trochęsiętrzeba namęczyć, żeby za pomocą phpMyAdmina zapisać coś do bazy w UTF-8.

0

Akurat phpMyAdmin sobie konwertuje to do takiego kodowania jakie tam sobie chce, ale nie zapisuje w bazie w UTF-8. Wiem z własnego doświadczenia, że trochęsiętrzeba namęczyć, żeby za pomocą phpMyAdmina zapisać coś do bazy w UTF-8.

Hmm ok ale problem w tym ze nie bardzo chce zmieniac istniejaca baze ani niczego zapisywac. Chce tylko odczytac dane z bazy i poprawnie wyswietlic. Baza zawiera 2 tabele po okolo 300 000 rekordow wiec......zmiana calej bazy to klopotliwe zadanie. Jezeli phpMyAdmin wyswietla poprawnie, to znaczy ze sie da.

Wiec mam pobierac dane z bazy, konwertowac do innego kodowania (np utf-8), a potem moge wyswietlic te dane? Ale skoro dane w bazie sa zapisane w kodowaniu windows, to dlaczego jezeli ustawie kodowanie stronki na windows to nie dziala ? A w ogole jak sprawdzic, jakie jest kodowanie zrodlowe?

0

Tak na dobrą sprawę, jak to nie jest gdzieś grzecznie podane, to trzeba "zagadywać" na podstawie tego, co jest zamiast polskich literek wstawione i porównywać z różnymi kodowaniami. Program Gżegżółka zdaje się umożliwia takie sprawdzenie, ale nie dam głowy.

0

Witam,

nie wiem czy to dokladnie ten sam problem, ale moj rozwiazalo ustawienie kodowania latin2 poprzez PHP (w funkcji, ktora laczy z baza danych, wiec tylko w jednym miejscu):

$sql = "SET CHARSET latin2";
mysql_query($sql);

Po wyslaniu tego zapytania - i pozniejszym pobieraniu (i wysylaniu) danych z (do) bazy - pytajniki, ktore wczesniej sluzyly przegladarkom (tylko im, bo phpMyAdmin wyswietlal znaki poprawnie) za zastepniki polskich znakow, znow zaczely przypominac to, co powinny...

PhpMyAdmin mam skonfigurowany tak o:
system kodowania znakow dla MySQL - UTF-8 Unicode (utf8)
system porownan dla połączenia MySQL - latin2_general_ci (czyli ISO 8859-2 Central European)
no i jezyk polski rzecz jasna.

Meczylem sie z tym badziewiem dwa dni. Moze komus to info sie przyda.

0

Qp3k, odswiezyles moj watek sprzed pol roku ;-) Ale sprobuje tego sposobu, bo jak dotad ciagle ten problem jest nierozwiazany :|

Probowalem podejrzec jak phpMyAdmin to robi, ze poprawnie wyswietla zawartosc i zastosowac to na mojej stronce, ale niewiele z tego mi wyszlo :|

[edit]
No i prosze - problem rozwiazany! Az dziwne ze nikt mi nie zaproponowal takiego prostego rozwiazania wczesniej :>:>:>:>

0

Ano odswiezylem, bo temat stal sie dla mnie aktualny ;) Przeszukalem pol swiata zeby dojsc do tego rozwiazania, wiec dlaczego nie mialbym zaoszczedzic szukania innym [browar]

0
Qp3k napisał(a)

Witam,

nie wiem czy to dokladnie ten sam problem, ale moj rozwiazalo ustawienie kodowania latin2 poprzez PHP (w funkcji, ktora laczy z baza danych, wiec tylko w jednym miejscu):

$sql = "SET CHARSET latin2";
mysql_query($sql);

Po wyslaniu tego zapytania - i pozniejszym pobieraniu (i wysylaniu) danych z (do) bazy - pytajniki, ktore wczesniej sluzyly przegladarkom (tylko im, bo phpMyAdmin wyswietlal znaki poprawnie) za zastepniki polskich znakow, znow zaczely przypominac to, co powinny...



Ja to zrobilem tak:
```php
 SET NAMES utf8

i heja ;) Aha. Jak chciałem sortować z polskimi znakami, to zamiast utf_8general wybieralem w tabelkach utf8_polish_ci

0

Nie dziala jeszcze jedna rzecz. A mianowicie, owszem, po pobraniu z bazy dane sa wyswietlane poprawnie......pod warunkiem, ze zapytanie zakonczy sie sukcesem - a stanie sie tak tylko wtedy, gdy tresc zapytania (czyli wyszukiwana fraza) nie zawiera zadnych polskich znakow oprocz (dozwolone tylko "ó")

Jak sobie z tym poradziliscie? Kodowanie stronki to ISO, zapytanie zmieniajce kodowanie tez na ISO.

0

Mój problem wyglądał tak, że podczas wyświtlania news'ów z bazy zamiast kilku polskich liter były rózne znaki. Rozwiązaniem było wklejenie w sekcji head tego:

<title>Komunikaty</title>
<meta http-equiv="content-type"
    content="text/html; charset=iso-8859-2" />

1 użytkowników online, w tym zalogowanych: 0, gości: 1