Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Złe kodowanie po stronie serwera?
Forum PHP.pl > Forum > PHP
Largo
Witam,

Używam skryptu IP.Board ( proszę nie przenosić, nie dotyczy skryptu! ) i dziś przemyśliwałem, czy mam poprawne kodowanie w bazie danych. Okazało się to, czego się obawiałem - nie poprawne. Ustawiłem kodowanie w skrypcie utf-8 i działa, ale do bazy zapisuję dane w formacie:

Cytat
Jeśli chcesz dowiedzieć się ile twój przedmiot jest wart napisz :-) <br />W temacie musisz podać :ld/nldDokładne statystyki przedmiotu


Poprawne powinno wyglądać tak i ono działa:

http://wklej.com.pl/show.php?what=20090603170717

Dlaczego serwer tak zapisuje dane? Oto dane o MySQL:

System kodowania znaków dla MySQL: UTF-8 Unicode (utf8)
System porównań dla połączenia MySQL: utf8_general_ci

Tabele mają również ten sam system. W czym jest rzecz?

Pozdrawiam,
Largo
Prym
z tymi skryptami zwłaszcza w starszej wersji bywa że nie mają zadeklarowanego kodowania po połączeniu z bazą danych. więc znajdź miejsce gdzie się podpina pod bazę i zobacz czy jest zaraz po podłączeniu bazy wykonane zapytanie:

Kod
SET NAMES UTF8


jak nie ma to koniecznie dodaj. Powinno pomóc
Largo
Witam,

Teraz to ja już czegoś nie rozumiem. Możesz mi zapodać listę znaków UTF-8 jak powinny wyglądać w bazie danych? Zmieniłem teraz kodowanie na iso-8859-2 i mam znaki w bazie polskie tak jak się je piszę i widzi...

PS. Dziwne, seria polskich znaków:

ąęćóżdfgfg

Zostaje zapisana tak:

ąęćóżdfgfg

I programy rozumieją to, czy to jest poprawne kodowanie utf8_general_ci? Czy powinno ono wyglądać inaczej?
jezoo
sprawdz w ten sposob, na samym poczatku skryptu ktory wyswietla dane z bazy napisz cos takiego:
  1. <?php
  2. header('Content-Type: text/html; charset=ISO-8859-2');
  3. ?>
Largo
Witam,

Wynik:

Masz sugesti�, nowy pomys�, ciekaw� ide� na zmiany? Napisz tutaj! Z ch�ci� Ci� wys�uchamy i moşliwe, şe dzi�ki Tobie dokonamy zmian na lepsze.
jezoo
nie doczytalem do konca, mea culpa smile.gif
Cytat
System kodowania znaków dla MySQL: UTF-8 Unicode (utf8)
System porównań dla połączenia MySQL: utf8_general_ci


czyli w Twoim przypadku to UTF-8 zamiast ISO-8859-2

------[EDIT]
btw, zastosoj preg_replace zeby zastapic polskie znaki kodowaniem ASCI lub UTF, np:
  1. <?php
  2. $str = preg_replace("#ą(.*?)s#si", "ą", $str);
  3. ?>


wiecej o bbcode w tym temacie
Largo
Witaj,

Dziękuje za radę, ale tu nie chodzi o przenoszenie bazy, a tworzenie takich wpisów teraz... Nie chcę obudzić potem z tym problemem, a wolę go teraz rozwiązać.
Kaayl
W przy kodowaniu strony wazne sa conajmniej 3 ustawienia.

1. Przegladarki (definiujesz w <head> w html'u):
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

2. Bazy:
Ustawienia kodowania bazy jak rowniez tabel. Sprawdz np. w phpmyadminie czy wszedzie masz UTF-8

3. Przy zestawianiu polaczenia w php:
np. mysql_query("SET NAMES 'utf-8'"); //kodowanie polaczenia
Largo
Witam,

Wszystkie 3 ustawione poprawione... Czy powodem może być zmienna systemowa: character_set_server = latin1 i collation_server = latin1_swedish_ci?
Kaayl
Powinienes miec mniej wiecej cos takiego w my.cnf:

Kod
[client]
         default-character-set=utf8
         [mysql]
         default-character-set=utf8
         character-sets-dir=/usr/share/mysql/charsets
         [mysqlcheck]
         default-character-set=utf8
         character-sets-dir=/usr/share/mysql/charsets
         [mysqldump]
         default-character-set=utf8
         character-sets-dir=/usr/share/mysql/charsets
        
        
         [mysqld]
         default-character-set=utf8
         default-collation=utf8_general_ci
        
         character-set-server=utf8
         collation-server=utf8_general_ci
         init-connect='SET NAMES utf8'


Sprawdz czy masz tak serwer ustawiony. Daj znac jezeli masz tak samo i dalej nie dziala. Bedziemy dalej szukac.
Largo
Witaj,

Napisałem pytanie do administratora. Mimo to, mam pytanie. Dlaczego Wordpress dodaje do bazy polskie znaki tak jak się je piszę, a nie zamienia na encje? Czy tak powinna wyglądać bazą UTF-8, czyli znaki w swojej normalnej postaci?
Prym
dokladnie. Kodowanie UTF-8 ma "w sobie" wszystkie znaki specjalne poszczególnych języków. kwestia błędnego zapisu w bazie może również dotyczyć samej bazy (została utworzona jako iso) jak Kaayl napisał kodowanie musisz mieć bazy oraz poszczególnych pól tekstowych w tabelach ustawione na UTF

miałem kiedyś robótkę po kimś na bazie którą tamten ktoś przerabiał z iso na uTF i problemem była jedna kolumna - cała baza ustawiona na UTF tabele też a jedna kolumna TEXT miała ISO zamiast UTF. Co smieszne obok kolumna tytułu varchar miała UTF smile.gif
więc moja rada posprawdzaj dokładnie w myadminie każdą tabele i kolumny. acha przerabianie samego kodowania kolumny może spowodować że wszystkie dane w kolumnie dostaną krzaczków. najlepiej wyeksportuj bazę z dropem tabel i w eksporcie pozmieniaj wszelkie iso na utf8
Largo
Witaj,

Patrzyłem na wszystko i wszędzie jest utf8_general_ci, nie mam pojęcia jak mam zweryfikować takie dane... O dziwo na tym serwerze Wordpress dobrze zapisuje dane, bo są wszystkie znaki polskie i działa, a sam IP.Board daje mi tak po kościach, że nie wiem :-)
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.