Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL] Kodowanie znaków
Forum PHP.pl > Forum > Przedszkole
Krisu
Mam plik php, który jest kodowany w systemie UTF-8, nagłówek jaki jest wysyłany to:

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

i kod html
Cytat
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl">
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />

Php my admin (strona główna):
Cytat
System kodowania znaków dla MySQL: UTF-8 Unicode (utf8)
System porównań dla połączenia MySQL: utf8_unicode_ci

Zaś baza danych w której są zapisywane informacje jest kodowana w systemie latin1_swedish_ci.
Polskie znaki są kodowany w taki sposób
Cytat
śńłąşź

Jeżeli w php my adminie zmienię kodowanie dla pola na inne typu latin2_general_ci, lub utf8_unicode, to nie daje rezultatów.

Co mam zmienić, by polskie znaki były kodowane poprawnie w bazie danych. Nie zależy mi na ich wykorzystywaniu na stronach.
Chodzi tylko o poprawne kodowanie w bazie danych.
_olo_1984
zmień w bazie na utf-8 (podejrzewam że dane będziesz musiał wprowadzić jeszcze raz), pobierz dane i wyświetl na stronie zakodowanej w utf-8. Zobacz rezultat i napisz
tomsi
Miałem podobny przypadek z tym, że przenosiłem dane z jednej bazy danych na drugą. Niestety musiałem wprowadzić dane od nowa angrysmiley.gif
Chyba, że ktoś wie jak to "obejść" to przyda się na przyszłość snitch.gif
PawelC
Cytat
Chyba, że ktoś wie jak to "obejść" to przyda się na przyszłość snitch.gif

przepuścić zrzut bazy sql przez http://www.gzegzolka.com/ winksmiley.jpg I tabele w bazie od samego początku należy kodować w utf-8 wtedy nie będzie takich problemów.
Krisu
Czyli tworząc bazę danych z poziomu php mógłbym od razu ustalać typ kodowania danych?
mysql_query('SET NAMES UTF-8');

Pokombinuje jeszcze ale jak nie zadziala to bede pisał winksmiley.jpg
PawelC
poprostu ustawiasz kodowanie tabeli na utf-8 i wtedy przy tworzeniu zrzutu bazy niebędzie żadnych problemów z kodowaniem.
Krisu
Ma być samo UTF-8, bez żadnych utf8_unicode_ci, lub utf8_general_ci?

No i czy wystarczy ustawic dla tabeli, czy jeszcze dla pola trzeba to samo zrobić?
erix
SET NAMES utf8

Dla kolumn utf8_polish_ci, bo przy innych będzie Ci źle wg diakrytyków sortować. ;]
Krisu
Mimo wszystko nadal błędnie koduje znaki. bo albo zamienia je na questionmark.gif lub tak jak wyżej pisałem.

Może spytam tak. Jakie kodowanie obsługuje wszystkie polskie znaki? Jeśli miałbym tą informację, to już wykombinowałbym coś własnoręcznie.
PawelC
Kurde mi normalnie działa utf-8, mam polski znaki. Błąd był popełniony zapewne przy tworzeniu projektu bazy, gdzie kodowanie było inaczej ustawione niż utf-8. Będziesz musiał przepuścić zrzut bazy sql przez jakiś konwerter nic innego nie zrobisz. A robiłeś tak na stronie że odrazu po podłączeniu do bazy ustawiłeś kodowanie na utf-8?
Krisu
No ok, UTF-8 pięknie działa gdy wprowadzam ręcznie dane do bazy danych, ale gdy dzieje się to ze strony php po przez formularz to już są one źle kodowane. Co w takim wypadku mam zrobić? Od czego to zależy?

Dane wstawiam w ten sposób:
  1. <?php
  2. $insert = "INSERT INTO $tableName (dane1) VALUES ('$value')";
  3.  
  4. $insertresults = mysql_query($insert)
  5. or die (mysql_error());
  6. ?>
PawelC
Jakie masz kodowanie pliku tego gdzie masz formularz? Ja wszystkie pliki koduje w utf-8 i dodawanie tekstów z polskimi znakami działa bardzo dobrze. Pobierz sobie program notepad++, otwórz w nim plik z tym formularzem i ten od dodawania do bazy, w programie wybierz Format/Kodowanie w utf-8 i w sekcji head ustaw kodowanie jako utf-8, zapisz plik i powinno być wszystko ok.
Krisu
korzystam z KED-a u na samym wstępie zawsze zmieniam kodowanie na UTF-8. Plik w ktorym znajduje sie formularz jest wlasnie tak kodowany i plik ktory zajmuje sie danymi w formularzu i jest includowany takze jest w standardzie UTF-8.
PawelC
a panel phpMyAdmin? Jaki masz w nim kodowanie ustawione?
Krisu
System kodowania znaków dla MySQL: UTF-8 Unicode (utf8)
System porównań dla połączenia MySQL: utf8_general_ci
Sadu2
Ja mam tak:

Metoda porównywania napisów - utf8_general_ci

Każda tabela w bazie:

  1. DEFAULT CHARSET=utf8


Pliki zapisywane w utf-8 (bez sygnatury)

Po połączeniu z bazą:

  1. <?php
  2. mysql_query("SET NAMES 'utf8'");
  3. mysql_query("set character set 'utf8_general_ci'");
  4. ?>


I wszystko działa jak należy.
Krisu
zrobiłem tak samo, jak podałeś, powyżej i wreszcie problem zniknął. smile.gif
Wielkie dzięki.

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