Largo
3.06.2009, 16:05:37
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=20090603170717Dlaczego 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
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
4.06.2009, 11:51:30
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
4.06.2009, 12:31:13
sprawdz w ten sposob, na samym poczatku skryptu ktory wyswietla dane z bazy napisz cos takiego:
<?php
header('Content-Type: text/html; charset=ISO-8859-2'); ?>
Largo
4.06.2009, 12:32:17
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
4.06.2009, 12:36:45
nie doczytalem do konca, mea culpa

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:
<?php
?>
wiecej o bbcode w tym
temacie
Largo
4.06.2009, 13:26:50
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
4.06.2009, 15:47:56
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
4.06.2009, 16:11:43
Witam,
Wszystkie 3 ustawione poprawione... Czy powodem może być zmienna systemowa: character_set_server = latin1 i collation_server = latin1_swedish_ci?
Kaayl
4.06.2009, 18:37:17
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
4.06.2009, 19:03:48
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?
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
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
4.06.2009, 20:47:30
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.