Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL] Polskie znaki w UTF-8
Forum PHP.pl > Forum > Przedszkole
obelix94
Witam!

Dookoła ludzie mi mówią: "Skończ z ISO, to przeszłość". Ale jak mam do cholery skończyć z ISO skoro nie umiem się bawić w UTF-8.

Dlatego przychodzę i pytam na forum: jak zmienić ciąg znaków ŻżŹźĄąŚśĆ棳ÓóĘę, aby był poprawnie odczytywany przez przeglądarkę?

Próbowałem gżegżółką, ale pojawiają się tylko znaczki zapytania. Ale jak już tym samym programem konwertuję do ISO to normalnie wyświetla polskie znaki.

Dodam że dodałem <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> (i odpowiednio zmieniałem).

Kolejna sprawa to mysql. Mimo poradnika na wortalu polskie znaczki zmieniają się na questionmark.gifquestionmark.gif.

Jak temu zaradzić?
thomson89
W Grzegrzółce ustaw: Konwersja i niżej wybierz Windows 1250 oraz w drugim polu UTF-8.

A co do mysqla to nic ci nie pomogę.
Spawnm
jest przyczepiony temat o tym, jest artykuł na wortalu o tym...poczytaj , pomyśl smile.gif
zelu
Najlepiej miec zgodnosc we wszystkich aspektach. Tzn miec dane w bazie zakodowane jako utf-8, meta ustawione na utf-8, sam plik ze strona zapisany w utf-8 i jeszcze ustawic SET NAMES przy polaczeniu na utf-8 smile.gif Wtedy all powinno dzialac winksmiley.jpg


Pozdro
obelix94
To tak:
1. Zrobiłem ALTER DATABASE `nazwa_bazy` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci i to ALTER TABLE `nazwa_tabeli` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci na bazie danych.
2. Dodałem to mysql_query ('SET NAMES utf8');
mysql_query ('SET CHARACTER_SET utf8_unicode_ci'); do kodu php.
3. Wykonałem update tekstu z windows 1250 na utf-80 według tomsona.
4. Wynik: Nie ma prawdziwej pobo??no?›ci bez bohaterstwa.Henri Fredric Amieli = jeszcze gorszy. Przed tymi zabiegami było Nie ma prawdziwej pobo??ności bez bohaterstwa.Henri Fredric Amieli.

W notatniku wygląda to tak: Nie ma prawdziwej poboĹĽnoĹ›ci bez bohaterstwa. (przepuszczone przez grzegrzólkę)

I co? Co dalej?
Mephistofeles
Bo tekst był zapisany w latin2 czy innym kodowaniu, a teraz zmieniłeś kodowanie całej bazy. Powinieneś najpierw przekodować całą zawartość bazy.
pi_wo
Cytat(obelix94 @ 18.03.2009, 19:38:42 ) *
2. Dodałem to mysql_query ('SET NAMES utf8');

-> to załatwia Ci cały problem komunikacji z bazą danych , nie musisz nic konwertować. Wymuszasz w ten stosób na SQL komunikację w UTF-8 (w dużym uproszeniu), bez względu na to jaka jest natywna strona kodowa.

Cytat(obelix94 @ 18.03.2009, 19:38:42 ) *
3. Wykonałem update tekstu z windows 1250 na utf-8 według tomsona.

-> Pozwól Gżegżółce automatycznie rozpoznać charset pliku źródłowego. Jeżeli nie pomoże: jest taka opcja jak mieszanka iso + windows, może masz w pliku napaćkane różnym kodowaniem.
zelu
A masz plik z kodem zrodlowym zapisany w kodowaniu utf-8??
Mephistofeles
To akurat nie ma znaczenia. PHP nie rozpoznaje kodowania skryptu.
obelix94
Nic nie działa. Nadal pojawiają się te znaczki.

Brałem ŻżŹźĄąŚśĆ棳ÓóĘę i konwertowałem:
Autmatyczny >>> UTF-8
Utf-8 >>> UTF-8
Mieszanka >>> UTF-8
Windows 1250 >>> UTF-8

i za każdym razem, robiłem update i w bazie pojawiały się ? ? ? ?, a na stronce ? ? ? ?

I co mam zrobić? Wam, działa? Jak to robicie? Może mi ktoś to objasnić?

erix, kiedyś się tak mądrzył to niech teraz powie co i jak!

EDIT

Otworzyłem front page express
napisałem mój ciąg i przepusciłem przez grzegrzółkę Automatyczny >>> UTF
  1.  
  2. <meta name="GENERATOR" content="Microsoft FrontPage 5.0">
  3. <meta name="ProgId" content="FrontPage.Editor.Document">
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  5. <title>ŻżŹźĄąŚśĆ棳ÓóĘę</title>
  6. </head>
  7.  
  8.  
  9. <p>ŻżŹźĄąŚśĆ棳ÓóĘę</p>
  10.  
  11. </body>
  12.  
  13. </html>


I grzegrzółka zmieniała nawet meta na utf-8 (wcześniej było windows-1250) ale jak żem ku*wa to dał do bazy to nadala te je*ane ? ? ? ? i co mam robić? hę?
thomson89
Wiesz co ~obelix94:
1. Nieładnie tak mówić.
2. Też mam taki sam problem (wykonuję kroki i znaczki zapytania). Ale nie czekam z nim aż ktoś rozwiąże. Google.pl i wszystko jasne. Jak znajdę rozwiązanie to powiem ze znalazłem.
pi_wo
Z tego co zrozumiałem zamieniłeś na UTF-8 z ISO (latin2), ale już się pogubiłem. Jeżeli zgadza się to co mówię:
  • wpisz do testowego rekordu w bazie ciąg polskich znaków diakrytycznych (np. za pomocą konsoli, phpadmina lub czego tam używasz).
  • w pliku index musi być wyszczególniona strona kodowa (<meta http-equiv="content-type" content="text/html; charset=UTF-8">)
  • zaraz po połączeniu z bazą przez php (mysql_connect) dla pewności dodaj mysql_query ('SET NAMES utf8');, choć teoretycznie nie jest to wymagane i wyświetl treść testowego rekordu.
To MUSI działać poprawnie, jeżeli baza na 100% działa w UTF-8. Jeżeli nie działa to coś masz pochrzanione w konfiguracji serwera bazy danych.

Moje przypuszczenia:

Jeżeli konwertujesz istniejącą bazę do innej strony kodowej, przed konwersją zrób dumpa i skonwertuj w gżegżółce plik do interesującego Cię formatu smile.gif Domyślam się, że tu właśnie popełniłeś błąd (nie ze swojej wiedzy). Za pewne za pomocą "ALTER DATABASE `nazwa_bazy` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci i to ALTER TABLE `nazwa_tabeli` DEFAULT CHARACTER SET utf8 COLLATE" skonwertowałeś bazę wraz z treściami. MySQL poradzi sobie ze standardowym alfabetem, nie uwzględnił jednak znaków specjalnych i wstawił zamiast nich "??". Jeżeli się nie mylę i nie zrobiłeś backup'a bazy, to czeka Cię sporo pracy, bo ww proces nie jest odwracalny ("??" to niestety fizycznie zapisane znaki).

Jeżeli masz backup, wywal wszystkie treści z bazy (lub całą bazę) i przed importem skonwertuj w gżegżółce plik .sql do UTF-8. (tip: phpMyAdmin umożliwia określenie zestawu znaków dla pliku, z którego importujesz)

Jeżeli nie masz backup'a ... Cóż :/ musisz wybrać co jest dla Ciebie wygodniejsze:
- ręczne poprawienie wszystkich treści w bazie
- czy export bazy do .sql, otworzenie pliku w notatniku i ręczne poprawienie wszystkich znaków
obelix94
Cytat(pi_wo @ 19.03.2009, 11:52:05 ) *
Z tego co zrozumiałem zamieniłeś na UTF-8 z ISO (latin2), ale już się pogubiłem. Jeżeli zgadza się to co mówię:
  • wpisz do testowego rekordu w bazie ciąg polskich znaków diakrytycznych (np. za pomocą konsoli, phpadmina lub czego tam używasz).
  • w pliku index musi być wyszczególniona strona kodowa (<meta http-equiv="content-type" content="text/html; charset=UTF-8">)
  • zaraz po połączeniu z bazą przez php (mysql_connect) dla pewności dodaj mysql_query ('SET NAMES utf8');, choć teoretycznie nie jest to wymagane i wyświetl treść testowego rekordu.
To MUSI działać poprawnie, jeżeli baza na 100% działa w UTF-8. Jeżeli nie działa to coś masz pochrzanione w konfiguracji serwera bazy danych.


No i tak żem zrobił. W bazie ma tylko jedną tabelkę i jeden wiersz: cholerne polskie znaki. Używam konsoli myadmina sql. A i nadal nie działa...

Jak konwertowałem bazę nic w niej nie było.

Zrobiłem:
1. Eksportowałem bazę
2. Wyczyścuiłem bazę
3. Poprawiłem znaki zapytania na polskie znaki
4. Wziąłem grzegrzółkę i chciałem konwertować do utf-8 ale nie rozpoznano standardu

Co dalej?
Mephistofeles
Ale w czym poprawiłeś te znaki? Bo jeśli w programie pokroju Notatnika to znów masz windows-1250 winksmiley.jpg.
obelix94
Mniejsza z tym.

Mam ja taki pomysł a wy mi opiszecie co i jak.

1. Zakładam nową bazę danych.
2. ...

Napiszcie mi, proszę po kolei co mam robić aby mieć polskie znaki. Od początku (załozenia bazy) do końca (stworzenia tabelki i umieszczenie danych żćźęóń)

proszę, bo już się pogubiłem co i jak...
thomson89
1. Zakładasz bazę danych
2. Ustawiasz kodowanie w phpmyadmin na utf8_polish_ci
3. Tworzysz tabelkę za pomocą phpmyadmin i również dajesz utf_polish_ci
4. Insert into nazwa tabeli set nazwapola="żćźęćńłó"
5. Powinno byc wszystko ok

6. Za pomocą sql i php -> select * from where id="1" -> funkcja do danych, zapytanie
7. ustawiasz w meta charset na utf-8
8. Dajesz echo dla wyniku z bazy

9. Odpalasz all i podaj co ci wyszło.
Ulysess
mam podobny problem..
baza jest stworzona jako utf8_polish_ci
kazda tabela utf8_polish_ci
każde pole varcher utf8_polish_ci
format pliku UTF-8
w meta utf-8

przy pobraniu danych z bazy zamiast polskich znaków są znaki zapytania. .. :/
athei
Przyklejony Temat: MYSQL Polskie znaki, jest tam link do http://wortal.php.pl/wortal/artykuly/pomys...e_znaki_a_mysql, pod sam koniec jest napisane co i jak.
mysqli:
Kod
$mysqli->set_charset("utf8");

mysql:
Kod
mysql_query("SET NAMES utf8");
mysql_query("SET CHARACTER SET utf8");
mysql_query("SET collation_connection = utf8_polish_ci");

pdo:
Kod
$pdo-> query ('SET NAMES utf8');

J.J.
Podepnę się pod temat by nie robić syfu.
Mam stronkę kodowaną w UTF-8, pliki również kodowane w UTF-8, baza danych również.
Wszystko chodzi, ale czasem zdarza się, że odwiedzając stronę polskie znaki uciekają.
Są krzaki, źródło pokazuje, że kodowanie jest ISO, a wszędzie jest UTF-8. Po odświeżeniu strony wszytsko jest ok i kodowanie wraca na UTF-8.
Krzaki są na wszystkich polskich znakach i tych wpisanych w plik i tych wyciąganych z bazy danych

Gdzie może być błąd?
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.