Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][MYSQL] Polskie znaki w UTF-8
obelix94
post 18.03.2009, 19:03:09
Post #1





Grupa: Nieautoryzowani
Postów: 141
Pomógł: 0
Dołączył: 30.09.2008
Skąd: Gdańsk

Ostrzeżenie: (20%)
X----


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ć?


--------------------
Zawieszony w pisaniu przez @mike - pisze na PW. <?php echo !$lubie.'moderatorow' ?>
Jak to czytasz, to współczuj mi. Przebolewam za swe grzechy...
Współczujcie...
Gdzie to współczucie?
Go to the top of the page
+Quote Post
thomson89
post 18.03.2009, 19:19:08
Post #2





Grupa: Zarejestrowani
Postów: 1 178
Pomógł: 51
Dołączył: 7.01.2009
Skąd: Gdańsk

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


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ę.


--------------------
Sklep 70%
Go to the top of the page
+Quote Post
Spawnm
post 18.03.2009, 19:22:24
Post #3





Grupa: Moderatorzy
Postów: 4 069
Pomógł: 497
Dołączył: 11.05.2007
Skąd: Warszawa




jest przyczepiony temat o tym, jest artykuł na wortalu o tym...poczytaj , pomyśl smile.gif
Go to the top of the page
+Quote Post
zelu
post 18.03.2009, 19:23:52
Post #4





Grupa: Zarejestrowani
Postów: 229
Pomógł: 34
Dołączył: 7.12.2008
Skąd: Poznań

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


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
Go to the top of the page
+Quote Post
obelix94
post 18.03.2009, 19:38:42
Post #5





Grupa: Nieautoryzowani
Postów: 141
Pomógł: 0
Dołączył: 30.09.2008
Skąd: Gdańsk

Ostrzeżenie: (20%)
X----


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?


--------------------
Zawieszony w pisaniu przez @mike - pisze na PW. <?php echo !$lubie.'moderatorow' ?>
Jak to czytasz, to współczuj mi. Przebolewam za swe grzechy...
Współczujcie...
Gdzie to współczucie?
Go to the top of the page
+Quote Post
Mephistofeles
post 18.03.2009, 19:49:52
Post #6





Grupa: Zarejestrowani
Postów: 1 182
Pomógł: 115
Dołączył: 4.03.2009
Skąd: Myszków

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


Bo tekst był zapisany w latin2 czy innym kodowaniu, a teraz zmieniłeś kodowanie całej bazy. Powinieneś najpierw przekodować całą zawartość bazy.
Go to the top of the page
+Quote Post
pi_wo
post 18.03.2009, 20:22:45
Post #7





Grupa: Zarejestrowani
Postów: 36
Pomógł: 6
Dołączył: 18.03.2009

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


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.

Ten post edytował pi_wo 18.03.2009, 20:40:29
Go to the top of the page
+Quote Post
zelu
post 18.03.2009, 20:41:17
Post #8





Grupa: Zarejestrowani
Postów: 229
Pomógł: 34
Dołączył: 7.12.2008
Skąd: Poznań

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


A masz plik z kodem zrodlowym zapisany w kodowaniu utf-8??
Go to the top of the page
+Quote Post
Mephistofeles
post 18.03.2009, 20:45:24
Post #9





Grupa: Zarejestrowani
Postów: 1 182
Pomógł: 115
Dołączył: 4.03.2009
Skąd: Myszków

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


To akurat nie ma znaczenia. PHP nie rozpoznaje kodowania skryptu.
Go to the top of the page
+Quote Post
obelix94
post 19.03.2009, 11:07:14
Post #10





Grupa: Nieautoryzowani
Postów: 141
Pomógł: 0
Dołączył: 30.09.2008
Skąd: Gdańsk

Ostrzeżenie: (20%)
X----


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ę?

Ten post edytował obelix94 19.03.2009, 11:14:42


--------------------
Zawieszony w pisaniu przez @mike - pisze na PW. <?php echo !$lubie.'moderatorow' ?>
Jak to czytasz, to współczuj mi. Przebolewam za swe grzechy...
Współczujcie...
Gdzie to współczucie?
Go to the top of the page
+Quote Post
thomson89
post 19.03.2009, 11:17:12
Post #11





Grupa: Zarejestrowani
Postów: 1 178
Pomógł: 51
Dołączył: 7.01.2009
Skąd: Gdańsk

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


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.


--------------------
Sklep 70%
Go to the top of the page
+Quote Post
pi_wo
post 19.03.2009, 11:52:05
Post #12





Grupa: Zarejestrowani
Postów: 36
Pomógł: 6
Dołączył: 18.03.2009

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


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

Ten post edytował pi_wo 19.03.2009, 11:56:40
Go to the top of the page
+Quote Post
obelix94
post 19.03.2009, 11:59:33
Post #13





Grupa: Nieautoryzowani
Postów: 141
Pomógł: 0
Dołączył: 30.09.2008
Skąd: Gdańsk

Ostrzeżenie: (20%)
X----


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?

Ten post edytował obelix94 19.03.2009, 12:18:47


--------------------
Zawieszony w pisaniu przez @mike - pisze na PW. <?php echo !$lubie.'moderatorow' ?>
Jak to czytasz, to współczuj mi. Przebolewam za swe grzechy...
Współczujcie...
Gdzie to współczucie?
Go to the top of the page
+Quote Post
Mephistofeles
post 19.03.2009, 12:23:18
Post #14





Grupa: Zarejestrowani
Postów: 1 182
Pomógł: 115
Dołączył: 4.03.2009
Skąd: Myszków

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


Ale w czym poprawiłeś te znaki? Bo jeśli w programie pokroju Notatnika to znów masz windows-1250 winksmiley.jpg.
Go to the top of the page
+Quote Post
obelix94
post 19.03.2009, 13:52:27
Post #15





Grupa: Nieautoryzowani
Postów: 141
Pomógł: 0
Dołączył: 30.09.2008
Skąd: Gdańsk

Ostrzeżenie: (20%)
X----


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...


--------------------
Zawieszony w pisaniu przez @mike - pisze na PW. <?php echo !$lubie.'moderatorow' ?>
Jak to czytasz, to współczuj mi. Przebolewam za swe grzechy...
Współczujcie...
Gdzie to współczucie?
Go to the top of the page
+Quote Post
thomson89
post 20.03.2009, 13:40:04
Post #16





Grupa: Zarejestrowani
Postów: 1 178
Pomógł: 51
Dołączył: 7.01.2009
Skąd: Gdańsk

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


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.


--------------------
Sklep 70%
Go to the top of the page
+Quote Post
Ulysess
post 29.08.2009, 18:10:54
Post #17





Grupa: Zarejestrowani
Postów: 695
Pomógł: 65
Dołączył: 27.07.2009
Skąd: Y

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


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. .. :/
Go to the top of the page
+Quote Post
athei
post 29.08.2009, 20:15:53
Post #18





Grupa: Zarejestrowani
Postów: 389
Pomógł: 141
Dołączył: 11.04.2009

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


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');

Go to the top of the page
+Quote Post
J.J.
post 21.09.2009, 18:47:26
Post #19





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 21.09.2009

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


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?
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: 24.04.2025 - 05:42