Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Dane wyciągnięte z bazy (poprawnie zapisane)
Forum PHP.pl > Forum > PHP
L_Devil
Witam!

Na mojej stronie pobieram dynamiczną zawartość działu i wyświetlam ją userowi. Serwer - php4, baza - mysql4 - kodowanie znaków ustawione na latin2.
Gdy sprawdzam phpmyadminem, w bazie nia ma żadnych krzaczków. Niestety, gdy pobiorę dane na stronę, wszystkie literki 'ś' są zmieniane na '?', zaś literki 'ą' na krzaczki. Co ciekawsze, wszystkie pozostałe polskie litery są poprawnie wyświetlane. Kodowanie strony (podane w Meta) to ISO. Czy ktoś wie może jak rozwiązać ten problem?
the_foe
Cytat(L_Devil @ 2006-03-08 19:28:35)
Witam!

Na mojej stronie pobieram dynamiczną zawartość działu i wyświetlam ją userowi. Serwer - php4, baza - mysql4 - kodowanie znaków ustawione na latin2.
Gdy sprawdzam phpmyadminem, w bazie nia ma żadnych krzaczków. Niestety, gdy pobiorę dane na stronę, wszystkie literki 'ś' są zmieniane na '?', zaś literki 'ą' na krzaczki. Co ciekawsze, wszystkie pozostałe polskie litery są poprawnie wyświetlane. Kodowanie strony (podane w Meta) to ISO. Czy ktoś wie może jak rozwiązać ten problem?

ustawienie bazy nie ma tu znaczenia. Dzieki temu ze baza jest ustawiona na latin2 mysql odpowiednio interpretuje polskie znaki (w tym przypadku kodowane w ISO) np przy sortowaniu czy przy upperyzacji / loweracji polskich znakow. W zaden spsob nie zmienia to wartosci zapisanego znaku.
ISO i WIN roznie koduje tylko trzy znaki, w tym ąĄ i śŚ. Po prostu formularz ma inne kodowanie niz strona odczytujaca dane.
użyj funkcji:
  1. <?php
  2.  
  3. $znaki_win="\xA5\x8C\x8F\xB9\x9C\x9F";
  4. $znaki_iso="\xA1\xA6\xAC\xB1\xB6\xBC";
  5. $znaki_iso_wszystkie="\xA1 \xC6 \xCA \xA3 \xD1 \xD3 \xA6 \xAC \xAF \xB1 \xE6 \xEA \xB3 \xF1 \xF3 \xB6 \xBC \xBF";
  6. $znaki_utf="\xC4\x84 \xC4\x86 \xC4\x98 \xC5\x81 \xC5\x83 \xC3\x93 \xC5\x9A \xC5\xB9 \xC5\xBB \xC4\x85 \xC4\x87 \xC4\x99 \xC5\x82 \xC5\x84 \xC3\xB3 \xC5\x9B \xC5\xBA \xC5\xBC";
  7. function to_iso($txt)
  8. {
  9. //konwertuje tekst do iso
  10. global $znaki_win, $znaki_iso;
  11. return strtr($txt,$znaki_win,$znaki_iso);
  12. }
  13. function to_win($txt)
  14. {
  15. //konwertuje tekst do win
  16. global $znaki_win, $znaki_iso;
  17. return strtr($txt,$znaki_iso,$znaki_win);
  18. }
  19. function to_utf($txt)
  20. {
  21.  //konwertuje tekst do utf-8
  22. global $znaki_utf, $znaki_iso_wszystkie;
  23. $arr1=explode(" ",$znaki_iso_wszystkie);
  24. $arr2=explode(" ",$znaki_utf);
  25. for ($i=0;$i<count($arr1);$i++){
  26. $ae[$arr1[$i]]=$arr2[$i];
  27. }
  28. return strtr($txt,$ae);
  29. }
  30. function from_utf($txt)
  31. {
  32.  //konwertuje polskie znaki w utf do iso
  33. global $znaki_utf, $znaki_iso_wszystkie;
  34. $arr1=explode(" ",$znaki_utf);
  35. $arr2=explode(" ",$znaki_iso_wszystkie);
  36. for ($i=0;$i<count($arr1);$i++){
  37. $ae[$arr1[$i]]=$arr2[$i];
  38. }
  39. return strtr($txt,$ae);
  40. }
  41. ?>

Cytat
Wypróbowałem twój kod na wszystkie możliwe sposoby (włącznie z dodaniem definicji globals wewnątrz funkcji), ale nic z tego nie wychodzi. Bez względu czy konwertuję z win do iso, czy z iso do win - krzaczki nadal występują


rzeczywiscie, zapomnialem o global, normalnie uzywam tego jako metode klasy i zapomnialem o globalizacji.
Przy okazji uskuteczniam to funkcje obslugi polskich znakow w UTF.
L_Devil
Witam!

Wypróbowałem twój kod na wszystkie możliwe sposoby (włącznie z dodaniem definicji globals wewnątrz funkcji), ale nic z tego nie wychodzi. Bez względu czy konwertuję z win do iso, czy z iso do win - krzaczki nadal występują

Sprostowanie:
Okazało się że popełniłem literówkę przy definiowaniu globals wewnątrz funkcji. Teraz śmiga jak należy biggrin.gif

Sorry za problem i dziękuję za rozwiązanie biggrin.gif
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.