Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Dziwne kodowanie polskich znaków, MySQL
rugby
post 2.06.2009, 01:39:50
Post #1





Grupa: Zarejestrowani
Postów: 61
Pomógł: 1
Dołączył: 21.05.2009

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


Zauważyłem, że w mojej bazie danych MySQL polskie znaki zachowywane są w dziwny sposób:

Kod
"Ä…"=>"ą"
"ć"=>"ć"
"Ä™"=>"ę"
"ó"=>"ó"
"Å‚"=>"ł"
"Å„"=>"ń"
"Å›"=>"ś"
"ż"=>"ż"
"ź"=>"ź"
"Å�"=>"Ł"
"Ó"=>"Ó"
"ü"=>"ü"
"ä"=>"ä"
"Å‘"=>"ö"
"Å�"=>"Ö"

Strona, która na moim serwerze wyświetla dane z bazy ma kodowanie UTF-8 i wyświetla znaki poprawnie. Kiedy zrobię zrzut bazy i zaimportuję go na inny serwer przez phpMyAdmin, to polskie znaki mają postać niepoprawną mimo takiej samej strony wyświetlającej je.

Jakim programem skonwertować te niepoprawne znaki na ich odpowiedniki w UTF-8?


--------------------
Juvenia Kraków Rugby Klub
Pobierz Google Chrome!
Go to the top of the page
+Quote Post
leon1313
post 2.06.2009, 04:27:43
Post #2





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 23.10.2007

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


A próbowałeś
Kod
  "SET NAMES 'utf8'"
Go to the top of the page
+Quote Post
blooregard
post 2.06.2009, 08:25:30
Post #3


Newsman


Grupa: Moderatorzy
Postów: 2 033
Pomógł: 290
Dołączył: 21.12.2007
Skąd: Łódź




Przy imporcie przez phpMA ustaw właściwy zestaw znaków dla importowanej bazy, może to jest przyczyną ("Kodowanie pliku")


--------------------
Life's simple... You make choices and don't look back...
Go to the top of the page
+Quote Post
rugby
post 2.06.2009, 08:48:47
Post #4





Grupa: Zarejestrowani
Postów: 61
Pomógł: 1
Dołączył: 21.05.2009

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


Sęk w tym, że w UTF-8 jest cały phpMyAdmin, importowanie plików jako UTF-8, jak na mojej stronie (też z kodowaniem UTF-8) dam "set names utf8" to wyświetla właśnie takie krzaczki jak powyżej, a jak nie dam to wyświetla znaki zapytania zamiast polskich znaków w Firefoxie.

Mam wrażenie, że te polskie znaki zapisane są w jakiejś odmianie Unicode, gdyż 1 znak zajmuje 2 bajty (tak jak przy UTF-8).


--------------------
Juvenia Kraków Rugby Klub
Pobierz Google Chrome!
Go to the top of the page
+Quote Post
erix
post 2.06.2009, 09:47:40
Post #5





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
są w jakiejś odmianie Unicode, gdyż 1 znak zajmuje 2 bajty (tak jak przy UTF-8).

Gdyby był unicode, to wszystki znaki by tyle zajmowały. UTF zapisuje dwubajtowo znaki wykraczające poza zakres ASCII.

Cytat
jak na mojej stronie (też z kodowaniem UTF-8) dam "set names utf8" to wyświetla właśnie takie krzaczki jak powyżej, a jak nie dam to wyświetla znaki zapytania zamiast polskich znaków w Firefoxie.

Dopisz to samo zapytanie do pliku, który importujesz. (na początku winksmiley.jpg)


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

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
rugby
post 2.06.2009, 13:01:00
Post #6





Grupa: Zarejestrowani
Postów: 61
Pomógł: 1
Dołączył: 21.05.2009

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


Cytat(erix @ 2.06.2009, 10:47:40 ) *
Gdyby był unicode, to wszystki znaki by tyle zajmowały. UTF zapisuje dwubajtowo znaki wykraczające poza zakres ASCII.
Unicode to tylko zestaw znaków, a UTF-8 to właśnie jeden z systemów ich kodowania.
Cytat(erix @ 2.06.2009, 10:47:40 ) *
Dopisz to samo zapytanie do pliku, który importujesz. (na początku winksmiley.jpg)
Dopisałem, dalej mam krzaczki zamiast polskich liter.

Natomiast znalazłem ten ciekawy post, przydałoby się takie bbWP2UTF8 dla dowolnych plików SQL, bo ręcznie mi się wszystkich polskich znaków nie uśmiecha zamieniać.


--------------------
Juvenia Kraków Rugby Klub
Pobierz Google Chrome!
Go to the top of the page
+Quote Post
Roly
post 3.06.2009, 13:32:48
Post #7





Grupa: Zarejestrowani
Postów: 55
Pomógł: 7
Dołączył: 8.12.2003
Skąd: Andrychów

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


Zawsze mnie dziwią te problemy z kodowanie znaków w bazach danych a już szczególnie wówczas jak dane mamy wszędzie w utf-8. Przecież recepta na to jest prosta:
- zwracaj uwagę na kodowanie znaków przy połączeniu (w phpMyAdmin zaraz po zalogowaniu masz info z jakiego rodzaju kodowania korzystasz, w aplikacji wystarczy zapytanie)

  1. SET NAMES 'utf8';


lub

  1. <?php
  2. mysql_set_charset('utf8');
  3. ?>

- jeżeli tworzysz tabelki ustawiaj im kodowanie na utf8
- jeżeli tworzysz kolumny ustawiaj im również kodowanie na utf8
- nie otwieraj zrzutów bazy danych notatnikiem tylko jakimś innym edytorem potrafiącym sprawdzić sobie kodowanie pliku tekstowego
- uważaj na edytory bo niektóre wstawiają do utf8 znacznik kolejności bajtów (BOM) który w UTF-8 jest nieobowiązkowy

PS
Jeżeli masz już zrypany zrzut bazy (czytaj krzaki w pliku) to poszukaj programu Gżegżółka winksmiley.jpg

PS 2
Dla pewności wstawi jeszcze na początku pliku w którym wysyłasz dane do przeglądarki

  1. <?php
  2. header('Content-Type: text/html; charset=utf-8');
  3. ?>


Zmień oczywiście typ zwracanego dokumentu jeżeli jest nie poprawny smile.gif
No i jeszcze dla pewności w IE

  1. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />


Ten post edytował Roly 3.06.2009, 13:40:10


--------------------
adminvps.pl
Go to the top of the page
+Quote Post
rugby
post 3.06.2009, 14:48:58
Post #8





Grupa: Zarejestrowani
Postów: 61
Pomógł: 1
Dołączył: 21.05.2009

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


Przecież już pisałem, że wszędzie mam UTF-8, zarówno w HTML-u jak i w połączeniu z bazą (SET NAMES utf8). Natomiast dane w pliku eksportu są zapisane takimi krzaczkami. Próbowałem już Gżegżółką, ale tam jest tylko ISO<->UTF8 i WIN1250<->UTF8, a ja potrzebuję coś jak DZIWNY_UTF8<->UTF8.

Nie mogąc się doczekać odpowiedzi zrobiłem prosty skrypt w PHP:
  1. <?php
  2. if($_POST['text'])
  3. {
  4.    header("Content-type: text/plain; charset=utf-8");
  5.    header("Content-disposition: attachment; filename=dump.sql");
  6.    $msg=$_POST['text'];
  7.    $msg=str_replace("Ä…","ą",$msg);
  8.    $msg=str_replace("ć","ć",$msg);
  9.    $msg=str_replace("Ä™","ę",$msg);
  10.    $msg=str_replace("Ăł","ó",$msg);
  11.    $msg=str_replace("Ĺ‚","ł",$msg);
  12.    $msg=str_replace("Ĺ„","ń",$msg);
  13.    $msg=str_replace("Ĺ›","ś",$msg);
  14.    $msg=str_replace("Ĺź","ż",$msg);
  15.    $msg=str_replace("Ĺş","ź",$msg);
  16.    $msg=str_replace("Ł","Ł",$msg);
  17.    $msg=str_replace("Ă“","Ó",$msg);
  18.    $msg=str_replace("Ăź","ü",$msg);
  19.    $msg=str_replace("ä","ä",$msg);
  20.    $msg=str_replace("Ĺ‘","ö",$msg);
  21.    $msg=str_replace("Ő","Ö",$msg);
  22.    echo stripslashes($msg);
  23. }
  24. ?>


--------------------
Juvenia Kraków Rugby Klub
Pobierz Google Chrome!
Go to the top of the page
+Quote Post
Largo
post 4.06.2009, 12:31:09
Post #9





Grupa: Zarejestrowani
Postów: 203
Pomógł: 6
Dołączył: 11.09.2005

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


Witam,

Mam dokładnie taki sam problem, czy to wina baz danych?
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: 25.04.2025 - 05:22