[ bujika @ 12.01.2004. 17:55 ] @
Pozdrav!

Mozda bi ovo pitanje trebalo da ide u MySQL forum, ali za sada da ga ostavimo ovde.

Imam MS Excell fajl, i sadrzaj tog fajla treba da upisem u MySQL databazu (verzija 3 neka). Problem je nastao upisivanjem nasih slova u bazu.

Ideja mi je bila da Excell-ov fajl snimim u HTML formatu, zatim da ga PHP skript ucita i "ocisti" od HTML tagova, a zatim da sadrzaj (po nekoj zavisnosti) upise u bazu. To sam i uradio, ali svuda gde su nasa slova, upise se npr. Č i slicno.

Primetio sam da ako u browseru prebacim na Encoding Western European (Windows), da mi se karakteri korektno prikazu.


Ima li neko resenje za ove probleme? Hvala unapred!

B.
[ -zombie- @ 12.01.2004. 22:53 ] @
moraš da daš malo više informacija.

pvro, html nije bilo najsjajnije rešenje za tako nešto. možda bi bolje prošao sa CSVom?

drugo, očigledno je da excell tabela nije bila u UTF enkodingu već u Windows-1250 (ili koji već), pa moraš uraditi konvertovanje.

verovatno ti posao može završiti iconv iz PHPa, ali je verovatno prostije da "ručno" zameniš sva naša slova sa unicode ekvivalentima..

znači recimo napraviš tablicu konverzije, i odradiš:

Code:

str_replace('&#268', 'š', $string);
str_replace('&#269', 'Š', $string);
...


samo ne zaboravi da fajl sačuvaš u UTF-8 enkodingu..
[ bzero @ 13.01.2004. 10:35 ] @
Problem je nastao kod konverzije u HTML, tada su sva nasa slova konvertovana u HTML entites. Najbolje da ovo pretvoris u UTF-8, sto je relativno prosto, jer je format:
&#_char_code_;

tako da je:

Č = 268 = unicode char 010C = Č


Funkcija bi mogla da izgleda otprilike ovako:

Code:

<?php
$str = "&#269;&#263;&#353;&#273;";
print _konvertuj($str);

function _konvertuj($s)
{
    return preg_replace("/&#(\d{3|4});/e", 'pack("a*", $i)', $s);
}
?>
[ -zombie- @ 13.01.2004. 14:12 ] @
super ;)

a kako se ja nisam mogao setiti nečeg tako prostog i elegantnog? :-P


a inače, i ja sam prvo pomislio na htmlentities(), ali me čudi što bujika kaže da kada odabere Western encoding, sve bude ok.. po mojoj logici, to ne bi trebalo da se dešava...
[ bzero @ 13.01.2004. 17:11 ] @
Uf, malko sam se preracunao, jeste lepo, ali ne radi:-(
Ovo sam napisao malo napamet, pa sam zaboravio sam da se u &#263; itd nalaze unikod karakteri sto bas nije isto sto utf8 i da ih tek treba konvertovati u utf8.
Evo koda koji radi:
Code:

<?php
$str = "&#269;&#263;&#353;&#273;";
print _konvertuj($str);

function _konvertuj($s)
{
    return preg_replace("/&#(\d{2,4});/e", 'UnicodeToUtf8(\1)', $s);
}

function UnicodeToUtf8($char)
{
    if ($char < 128)
    {
        $result = chr($char);
    }
    elseif($char < 2048)
    {
        $result = chr(192 + (($char - ($char % 64)) / 64));
        $result .= chr(128 + ( $char % 64));
    }
    else
    {
        $result = chr(224 + (($char - ( $char % 4096)) / 4096));
        $result .= chr(128 + ((($char % 4096) - ($char % 64)) / 64));
        $result .= chr(128 + ($char % 64));
    }
    return $result;
}
?>