Kodowanie znaków WWW i MySQL

0

Niedawno postawiłem stronkę na WEBD.pl i nie mogę odpowiednio ustawić kodowania bazy MySQL aby poprawnie wyświetlała znaki z bazy na stronie WWW.

Używam kodowania strony WWW: Windows-1250
i cała strona jest wyświetlana OK, lecz nieważne jak ustawię bazę MySQL to i tak wyświetla mi jakiś znaczek zamiast litery "ś". Czy ktoś mógłby mi pomóc?

Literę "ś" nie wyświetla z pola tabeli tylko na stronie WWW pokazuje jakie wartości może przyjąć pole ENUM|SET i znaczek jest ciągnięty z deklaracji wartości pola ENUM a nie jako znaczek w tekście w polu TEXT, BLOB czy innym.

Strona http://prgTW.webd.pl/d.pl/

Błąd występuje w liście rozwijanej w środkowej ramce.

0

z tego co widze kodowanie po stronie bazy masz latin2(8859-2) wynika to z kodu znaku 'ś', ktory w kodowaniu cp1250 jest wyswietlany jako '?'
po pierwsze nie korzystaj z kodowania win-1250 bo te kodowanie jest prawidlowe wylacznie dla wingrozy uzywaj ustalonego przez standard iso kodowania iso-8859-2
dla pewnosci mozesz ustalic kodowanie po stronie klienta uzywajac do tego mysqli_options

      $sql = mysqli_init();
      mysqli_options($sql, MYSQLI_INIT_COMMAND, 'SET CHARACTER SET latin2');
      mysqli_real_connect($sql, "host", "user", "haslo", "nazwa bazy");

to akurat ustala kodowanie zgodne ze standardem iso-8859-2 o ktorym wspominalem wczesniej dla wingrozowego zamiast latin2 piszesz cp1250 ale jak juz wspomnialem nie jest to standardowe kodowanie dla polskich znakow

0

Ja u siebie rozwiązałęm problem inaczej - użytkownik sam sobie wybiera jakie chce kodowanie (jak bardzo chce :P) i zapisuje się w bazie jak chce, tyle tylko, że przed wyświetleniem strony konwertuje funkcją poniżej. Zalety funkcji są takie, że nie podaje kodowania źródłowego (Win-1250, ISO, czy UTF), a tylko wynikowe... W praktyce mogę sobie zarządzać stroną zarówno na Win98, na którym jest tylko notatnik (i win-1250), jak i linuxie, na ktorym raczej wina nie bedzie :P. Poza tym nie mam problemów z konwersją do XML (konkretnie RSS), w ktorym podobno zalecany jest UTF...

pytanie moje tylko: czy taka funkcja jest ok? bo ją troche na szybko przerobiłem z jakiejśtam innej :)

function my_iconv($to, $string)
  { //TODO: problemy z konwersja z UTF, konwersja do innych kodowan, usun powtarzajace sie znaki
  $x2utf = array(
    "\xb1" => "\xc4\x85", "\xa1" => "\xc4\x84", "\xe6" => "\xc4\x87", "\xc6" => "\xc4\x86",
    "\xea" => "\xc4\x99", "\xca" => "\xc4\x98", "\xb3" => "\xc5\x82", "\xa3" => "\xc5\x81",
    "\xf3" => "\xc3\xb3", "\xd3" => "\xc3\x93", "\xb6" => "\xc5\x9b", "\xa6" => "\xc5\x9a",
    "\xbc" => "\xc5\xbc", "\xac" => "\xc5\xbb", "\xbf" => "\xc5\xba", "\xaf" => "\xc5\xb9",
    "\xf1" => "\xc5\x84", "\xd1" => "\xc5\x83",
    "\xb9" => "\xc4\x85", "\xa5" => "\xc4\x84", "\xe6" => "\xc4\x87", "\xc6" => "\xc4\x86",
    "\xea" => "\xc4\x99", "\xca" => "\xc4\x98", "\xb3" => "\xc5\x82", "\xa3" => "\xc5\x81",
    "\xf3" => "\xc3\xb3", "\xd3" => "\xc3\x93", "\x9c" => "\xc5\x9b", "\x8c" => "\xc5\x9a",
    "\x9f" => "\xc5\xbc", "\x8f" => "\xc5\xbb", "\xbf" => "\xc5\xba", "\xaf" => "\xc5\xb9",
    "\xf1" => "\xc5\x84", "\xd1" => "\xc5\x83" );
  $utfflip = array("\xc5\xbc" => "\xc5\xba", "\xc5\xbb" => "\xc5\xb9", "\xc5\xba" => "\xc5\xbc", "\xc5\xb9" => "\xc5\xbb");
  $win2utf = array(
    "\xb9" => "\xc4\x85", "\xa5" => "\xc4\x84", "\xe6" => "\xc4\x87", "\xc6" => "\xc4\x86",
    "\xea" => "\xc4\x99", "\xca" => "\xc4\x98", "\xb3" => "\xc5\x82", "\xa3" => "\xc5\x81",
    "\xf3" => "\xc3\xb3", "\xd3" => "\xc3\x93", "\x9c" => "\xc5\x9b", "\x8c" => "\xc5\x9a",
    "\x9f" => "\xc5\xbc", "\x8f" => "\xc5\xbb", "\xbf" => "\xc5\xba", "\xaf" => "\xc5\xb9",
    "\xf1" => "\xc5\x84", "\xd1" => "\xc5\x83" );
  $iso2utf = array(
    "\xb1" => "\xc4\x85", "\xa1" => "\xc4\x84", "\xe6" => "\xc4\x87", "\xc6" => "\xc4\x86",
    "\xea" => "\xc4\x99", "\xca" => "\xc4\x98", "\xb3" => "\xc5\x82", "\xa3" => "\xc5\x81",
    "\xf3" => "\xc3\xb3", "\xd3" => "\xc3\x93", "\xb6" => "\xc5\x9b", "\xa6" => "\xc5\x9a",
    "\xbc" => "\xc5\xbc", "\xac" => "\xc5\xbb", "\xbf" => "\xc5\xba", "\xaf" => "\xc5\xb9",
    "\xf1" => "\xc5\x84", "\xd1" => "\xc5\x83" );
  $string = strtr($string, $x2utf);
  if (strtoupper($to) == "ISO-8859-2") { return strtr($string, array_flip($iso2utf)); }
  elseif (strtoupper($to) == "WINDOWS-1250") { return strtr($string, array_flip($win2utf)); }
  else { return strtr($string, $utfflip); }
  }
0

witam
ustaw zarówno bazę jak i stronę na kodowanie utf-8 a wszelkie przeszłe i przyszłe problemy z formatowaniem znaków powinny zniknąć.

1 użytkowników online, w tym zalogowanych: 0, gości: 1