Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Dane wyciągnięte z bazy (poprawnie zapisane), zmieniają literki 'ś' i 'ą' na krzaczki.
L_Devil
post 8.03.2006, 19:28:35
Post #1





Grupa: Zarejestrowani
Postów: 195
Pomógł: 0
Dołączył: 13.04.2004
Skąd: Łódź

Ostrzeżenie: (0%)
-----


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?


--------------------
Językiem którym najlepiej operują wszyscy programiści są przekleństwa.
Go to the top of the page
+Quote Post
the_foe
post 8.03.2006, 20:34:39
Post #2





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 26.08.2003

Ostrzeżenie: (0%)
-----


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.

Ten post edytował the_foe 8.03.2006, 23:43:25


--------------------
..::tHe FoE::..
Go to the top of the page
+Quote Post
L_Devil
post 8.03.2006, 21:37:24
Post #3





Grupa: Zarejestrowani
Postów: 195
Pomógł: 0
Dołączył: 13.04.2004
Skąd: Łódź

Ostrzeżenie: (0%)
-----


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

Ten post edytował L_Devil 8.03.2006, 23:22:21


--------------------
Językiem którym najlepiej operują wszyscy programiści są przekleństwa.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 18.07.2025 - 00:14