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:
<?php
$znaki_win="\xA5\x8C\x8F\xB9\x9C\x9F";
$znaki_iso="\xA1\xA6\xAC\xB1\xB6\xBC";
$znaki_iso_wszystkie="\xA1 \xC6 \xCA \xA3 \xD1 \xD3 \xA6 \xAC \xAF \xB1 \xE6 \xEA \xB3 \xF1 \xF3 \xB6 \xBC \xBF";
$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";
function to_iso($txt)
{
//konwertuje tekst do iso
global $znaki_win, $znaki_iso; return strtr($txt,$znaki_win,$znaki_iso); }
function to_win($txt)
{
//konwertuje tekst do win
global $znaki_win, $znaki_iso; return strtr($txt,$znaki_iso,$znaki_win); }
function to_utf($txt)
{
//konwertuje tekst do utf-8
global $znaki_utf, $znaki_iso_wszystkie; $arr1=explode(" ",$znaki_iso_wszystkie); for ($i=0;$i<count($arr1);$i++){
$ae[$arr1[$i]]=$arr2[$i];
}
}
function from_utf($txt)
{
//konwertuje polskie znaki w utf do iso
global $znaki_utf, $znaki_iso_wszystkie; $arr2=explode(" ",$znaki_iso_wszystkie); for ($i=0;$i<count($arr1);$i++){
$ae[$arr1[$i]]=$arr2[$i];
}
}
?>
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.