Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP][HTML]Kodowanie - krzaki
Warmix
post
Post #1





Grupa: Zarejestrowani
Postów: 173
Pomógł: 0
Dołączył: 13.06.2011

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


Cześć, niby sprawa prosta, no ale kurde nie mogę sobie poradzić.
Sprawa ma się tak. Postawiłem bazę danych na localhoscie -> kodowanie bazy danych - utf8_unicode_ci, kodowanie tabel - utf8_unicode_ci, kodowanie wszystkich znakowych pól - utf8_unicode_ci.

W pliku:
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE html>
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  5. </head>


I na localhoście wszystko działa poprawie. Za pomocą strony napisanej na localhoście uzupełniłem bazę danych. Są w bazie krzaki, na stronie wyświetla się poprawnie.

Teraz przerzucam całość na serwer. Bazę danych exportuję do pliku SQL z kodowaniem UTF8. Importuję do bazy na serwerze (już ustawione było kodowanie utf8_unicode_ci). Po wgraniu kodowanie wszystkich tabel i pól zostało takie samo, czyli utf8_unicode_ci.

Wgrywam pliki strony. Dodam, że Notepad++ wykazuje kodowanie dla każdego z plików UTF-8 (bez BOM) no i na stronie, zamiast pojawienia się jak na localhoście polskich znaków, wszędzie zamiast nich pojawiają się oryginalne wpisy z bazy, tzn krzaczki. Co robię nie tak? Dodam, że wolałbym nie musieć edytować rekordów w bazie, gdyż jest ich dużo.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 13)
b4rt3kk
post
Post #2





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

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


W jaki sposób uzupełniłeś bazę na localhost?

Będziesz musiał zrobić poprawki na bazie, nie ma innej opcji, skoro są krzaczki. Nie powinno ich tam być.


--------------------
Jeśli pomogłem, kliknij proszę 'pomógł'. Dzięki.
Go to the top of the page
+Quote Post
Warmix
post
Post #3





Grupa: Zarejestrowani
Postów: 173
Pomógł: 0
Dołączył: 13.06.2011

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


Cytat(b4rt3kk @ 21.08.2017, 20:20:54 ) *
W jaki sposób uzupełniłeś bazę na localhost?

Będziesz musiał zrobić poprawki na bazie, nie ma innej opcji, skoro są krzaczki. Nie powinno ich tam być.


Standardowo za pomocą mysqli przy pomocy strony w php z ustawieniami cały czas takimi, jak podałem wyżej. Naprawdę nie ma opcji, żeby bez edycji bazy danych to przerobić? (Ewentualnie istnieje strona, która przetworzy mi online takie kodowanie, żebym mógł sobie bota napisać, który mi to przerobi?)
Go to the top of the page
+Quote Post
b4rt3kk
post
Post #4





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

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


Cytat(Warmix @ 21.08.2017, 20:24:58 ) *
Standardowo za pomocą mysqli przy pomocy strony w php z ustawieniami cały czas takimi, jak podałem wyżej. Naprawdę nie ma opcji, żeby bez edycji bazy danych to przerobić? (Ewentualnie istnieje strona, która przetworzy mi online takie kodowanie, żebym mógł sobie bota napisać, który mi to przerobi?)


Przykro mi, ale nie wiem co oznacza standardowo. Masz na myśli na przykład poprzez phpmyadmin, czy też napisałeś sobie jakiś skrypt? Jeśli skrypt, to czy wkleiłeś gotowe zapytania, czy też wczytałeś plik?

Nie znam takie strony.

Bota owszem, mógłbyś sobie napisać, ale musiałbyś przejrzeć wszystkie kolumny tekstowe wszystkich tabel i odpalić dla każdej odpowiednie zapytanie.


--------------------
Jeśli pomogłem, kliknij proszę 'pomógł'. Dzięki.
Go to the top of the page
+Quote Post
Warmix
post
Post #5





Grupa: Zarejestrowani
Postów: 173
Pomógł: 0
Dołączył: 13.06.2011

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


Cytat(b4rt3kk @ 21.08.2017, 20:32:45 ) *
Przykro mi, ale nie wiem co oznacza standardowo.


Inout textowy, button, klik i już. Dziwi mnie to, że dosłownie wszędzie od początku było ustawione takie samo kodowanie - dlatego dziwią mnie takie cyrki. Może to jakiś problem z exportem/importem? Chociaż tak, jak mówię, treści, tzn chodzi mi o konkretne krzaki odpowiadają sobie zarówno po stronie serwera jak i localhosta, zatem raczej to nie problem z przeniesieniem. Czy serwery podczas komunikacji narzucają jakieś kodowanie swoje i przez to pojawiają się krzaki?
Bo dodam, że jeśli w pliku np. xhtml dodam polskie znaki to są one poprawie wyświetlane, chodzi tylko o te pobrane z bazy danych.

Ten post edytował Warmix 21.08.2017, 19:38:41
Go to the top of the page
+Quote Post
b4rt3kk
post
Post #6





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

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


Cytat(Warmix @ 21.08.2017, 20:35:51 ) *
Inout textowy, button, klik i już. Dziwi mnie to, że dosłownie wszędzie od początku było ustawione takie samo kodowanie - dlatego dziwią mnie takie cyrki. Może to jakiś problem z exportem/importem? Chociaż tak, jak mówię, treści, tzn chodzi mi o konkretne krzaki odpowiadają sobie zarówno po stronie serwera jak i localhosta, zatem raczej to nie problem z przeniesieniem. Czy serwery podczas komunikacji narzucają jakieś kodowanie swoje i przez to pojawiają się krzaki?
Bo dodam, że jeśli w pliku np. xhtml dodam polskie znaki to są one poprawie wyświetlane, chodzi tylko o te pobrane z bazy danych.


Jakie locale jest ustawione na serwerze?

Jeśli inne niż polskie to to zmień przed importem:

  1. setlocale(LC_ALL, 'pl_PL');


--------------------
Jeśli pomogłem, kliknij proszę 'pomógł'. Dzięki.
Go to the top of the page
+Quote Post
Warmix
post
Post #7





Grupa: Zarejestrowani
Postów: 173
Pomógł: 0
Dołączył: 13.06.2011

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


Cytat(b4rt3kk @ 21.08.2017, 21:16:57 ) *
Jakie locale jest ustawione na serwerze?

Jeśli inne niż polskie to to zmień przed importem:

  1. setlocale(LC_ALL, 'pl_PL');


Nie bardzo rozumiem, jaki to ma wpływ na kodowanie znaków i przyznam, że nie bardzo rozumiem, jak w tym kontekście mam to użyć. Wrzucić do pliku PHP, odpalić go, potem wejśc w phpmyadmina i zaimportować bazę z pliku sql i powinno hulać? -- to nie hula.
Go to the top of the page
+Quote Post
b4rt3kk
post
Post #8





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

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


Cytat(Warmix @ 21.08.2017, 22:40:23 ) *
Nie bardzo rozumiem, jaki to ma wpływ na kodowanie znaków i przyznam, że nie bardzo rozumiem, jak w tym kontekście mam to użyć. Wrzucić do pliku PHP, odpalić go, potem wejśc w phpmyadmina i zaimportować bazę z pliku sql i powinno hulać? -- to nie hula.


Nie, przy tworzeniu bazy na localhost. Wywal to co masz obecnie lokalnie i utwórz ponownie. Zakładam, że masz wszelkie potrzebne komendy. Ewentualnie prześlij ten skrypt na docelowy serwer i tam utwórz bazę bezpośrednio.


--------------------
Jeśli pomogłem, kliknij proszę 'pomógł'. Dzięki.
Go to the top of the page
+Quote Post
viking
post
Post #9





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

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


Zdefiniuj kodowanie dla połączenia z bazą.


--------------------
Go to the top of the page
+Quote Post
Warmix
post
Post #10





Grupa: Zarejestrowani
Postów: 173
Pomógł: 0
Dołączył: 13.06.2011

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


Cytat(viking @ 22.08.2017, 02:29:06 ) *
Zdefiniuj kodowanie dla połączenia z bazą.


Rozumiem, że ustawić jako UTF-8?
Go to the top of the page
+Quote Post
viking
post
Post #11





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

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


Dobrze rozumiesz.
http://php.net/manual/pl/mysqli.set-charset.php


--------------------
Go to the top of the page
+Quote Post
Warmix
post
Post #12





Grupa: Zarejestrowani
Postów: 173
Pomógł: 0
Dołączył: 13.06.2011

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


Cytat(viking @ 22.08.2017, 07:40:06 ) *


Akurat tutaj skorzystałem z PDO. Zrobiłem to tak:

  1. class db_connect {
  2. private $pdo;
  3. private static $instance;
  4.  
  5. public function __construct(){
  6. try{
  7. global $host, $user, $pass, $database_name;
  8. $this->pdo = new PDO('mysql:host='.$host.';dbname='.$database_name.'', $user, $pass);
  9. $this->pdo->exec("set names utf8");
  10. }catch(PDOException $e){
  11. exit('Połączenie nie mogło zostać utworzone: ' . $e->getMessage());
  12. }
  13.  
  14. }
  15.  
  16. public function getQuery($query){
  17. return $stmt = $this->pdo->query($query);
  18. }
  19.  
  20. }


albo drugim sposobem, którego znalazłem:

  1. class db_connect {
  2. private $pdo;
  3. private static $instance;
  4.  
  5. public function __construct(){
  6. try{
  7. global $host, $user, $pass, $database_name;
  8. $this->pdo = new PDO('mysql:host='.$host.';dbname='.$database_name.'', $user, $pass, array(
  9. PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"
  10. ));
  11. }catch(PDOException $e){
  12. exit('Połączenie nie mogło zostać utworzone: ' . $e->getMessage());
  13. }
  14.  
  15. }
  16.  
  17. public function getQuery($query){
  18. return $stmt = $this->pdo->query($query);
  19. }
  20.  
  21. }



Niestety, bez zmian. Wciąż ładuje krzaki z bazy, zamiast przerobić je na polskie znaki sad.gif

ref
Jakaś idea co mogę jeszcze zrobić?
Go to the top of the page
+Quote Post
nospor
post
Post #13





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Z tego co zrozumialem, to ty teraz ustawiles to polaczenie dla bazy na serwerze, gdzie niestety masz juz smietnik.

polaczenie w utf8 masz ustawic na localhost, skasowac baze na localhost, na nowo ja wypelnic danymi, zrobic export na serwer i wowczas na serwerze tez utf8 w polaczeniu i moze bedzie smigac smile.gif


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

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Warmix
post
Post #14





Grupa: Zarejestrowani
Postów: 173
Pomógł: 0
Dołączył: 13.06.2011

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


Cytat(nospor @ 22.08.2017, 18:39:59 ) *
Z tego co zrozumialem, to ty teraz ustawiles to polaczenie dla bazy na serwerze, gdzie niestety masz juz smietnik.

polaczenie w utf8 masz ustawic na localhost, skasowac baze na localhost, na nowo ja wypelnic danymi, zrobic export na serwer i wowczas na serwerze tez utf8 w polaczeniu i moze bedzie smigac smile.gif


Kurde sad.gif Jak pisałem, wolałbym uniknąć wypełniania bazy jeszcze raz, gdyż jest to około 5000 tysięcy rekordów ręcznie wpisywanego tekstu sad.gif
nospor, istnieje jakaś szansa, żeby to obejść? Cokolwiek będzie na pewno szybsze, niż ręczne wypełnianie tego ponownie. Czy jeśli bym zrobił funkcję, która wczyta mi te stringi, wyszuka w nich znaki Unicode, potem nadpisze je na polskie (czy znów unicode?) już z łączeniem z bazą z charsetem UTF-8 to zadziała to? Albo jakaś zmiana kodowania tych kolumn? Cokolwiek.
Skoro na localhoście poprawnie mi interpretuje te znaki, to zrobiłbym może tak: utworzę nową baze, nowe połączenie z charsetem UTF8, pobiorę w pętli kolejno wszystkie pola i wrzucę je do nowej tabeli, zadziała takie coś?


____

Okej, zrobiłem tak jak napisałem wyżej i problem zażegnałem. Dzięki za naprowadzenie.

Ten post edytował Warmix 22.08.2017, 18:41:12
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 Aktualny czas: 20.08.2025 - 07:15