Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: utf-8 vs ISO 8859-15

Sebu [10.02.2008 00:21:41]

#

Olen hieman ummikko näiden merkistöjärjestelmien kanssa, mutta nyt olis varmaan hyvä sauma opiskella. Tää lähti siitä kun sain käyttäjäpalautetta, siitä että eräällä käyttäjällä ääkköset eivät tulostuneet oikein tekemieni nettisivujen tekstisisältöön. Sisältö on mysql-tietokannoissa ja kantojen merkistö näyttäisi olevan PhpMyAdminin etusivulla : "MySQL:n merkistö: UTF-8 Unicode (utf8)" . Laitoin sivuille php-koodin alkuun "header('Content-type: text/html; charset=utf-8');" , mutta ääkkösten tilalle tulostui kysymysmerkkejä. Vaihdoin sitten sen tuollain: ('Content-type: text/html; charset=ISO 8859-15'); Jä ääkköset näkyi taas oikein.

Mistä tämä sitten johtuu jos kerran MySQL:n merkistö oli kuitenkin tuo utf-8.

Merri [10.02.2008 05:53:01]

#

Tietokannan UTF-8 ja sivujen UTF-8 toimivat erikseen. Tietokannan UTF-8 -asetus muistaakseni vaikuttaa merkittävästi lähinnä siihen, millaiseen aakkosjärjestykseen kutsujen tiedot järjestetään. Jotta UTF-8 toimisi sivuilla, pitäisi kaikki tieto olla alunperin tallennettuna UTF-8:na myös tietokantaan. Koska sivut eivät kuitenkaan ole olleet alunperin tarjoiltuna UTF-8:na, niin tiedot on tallennettu kantaan ISO-8859-15:nä.

Minulla merkistöongelmat ovat kadonneet tyystin sen jälkeen, kun aloin vaan rohkeasti käyttää UTF-8:aa aina ja kaikkialla. Vain kertaalleen yhtä tietokantaa siirtäessä ja samalla MediaWikiä päivittäessä tuli merkistövirhettä, mutta se meni vielä enemmän tietokannan siirtämiskokemuksien vähäisyyden piikkiin (ja siihen, että MediaWikissä taisi sattua juuri silloin olemaan myös jonkinlainen merkistöpäivitys, siirryttiin pelkästään UTF-8:aan tms.).

Vasta_alkaja [10.02.2008 09:36:01]

#

Tallenna tieto tuolla tavalla tietokantaan ja ota utf-8 käytöön.

mysql_real_escape_string(utf8_decode($_POST['tiedot']))

Sebu [10.02.2008 13:30:01]

#

Kiitos. Selvitti asiaa huomattavasti.

Merri [10.02.2008 13:40:24]

#

Vielä yhtenä huomiona, kun palauttaa tietokantaa jonne tiedot on tallennettu UTF-8:na, pitää se palauttaa käyttäen shellin komentorivillä valitsinta --default-character-set utf-8 (tai jotain sinne päin). Hienona outoutena, kun otat varmuuskopion vaikka tietokannasta, joka on tallennettu ISO-8859-1:nä, ovat ne tiedostossa silti UTF-8:na. Vastaavasti UTF-8 on tuplana.

Elikkä kun otat varmuuskopion tietokannasta, niin se on aina just siinä muodossa kuin sen pitääkin olla, eikä sitä tiedostoa kannata kopeloida ellet ole vaihtamassa merkistöstä toiseen, tai jos olet varma ettet riko sitä (esim. vaihdat vaan taulujen nimiä tai muuta pientä). Jos palauttaessa tulee virhettä, niin kannattaa varmistaa että on palauttamassa kantaa oikeilla merkistöasetuksilla. Kannattaa myös verrata tietokantasoftan asetuksia palvelimien välillä jos palvelin vaihtuu, niin tietää sitten mistä voi kiikastaa.

Sebu [13.02.2008 11:08:27]

#

Aiheeseen vielä liittyen:

Miten onnistun tallentamaan normi php-filun utf-8 -muodossa. Käytän editorina TSW Webcoderia. Tietokantaan tallennettujen ja sieltä haettujen tekstien ääkköset näkyvät nyt oikein (tallennettu utf-8), mutta teidostossa olevien kiiteiden tekstien ääkköset nyt kysymysmerkkeinä.

Merri [13.02.2008 11:56:08]

#

Tarvitset editorin joka osaa tallentaa UTF-8:aa ilman BOMia. Teksti- ja koodieditoreja on pilvin pimein, kussakin homma toimii eri tavoin.

Itselläni käytössä on eräs versio Scitestä, jossa vaan vaihdetaan File > Encoding > UTF-8 Cookie kun tahtoo tallentaa ilman BOMia - se myös vaihtaa saman tien merkistön, joten näppärin tapa muuntaa ISO-8859-15 -tiedosto merkistöstä toiseen on leikata kaikki, sitten tehdä vaihto UTF-8:aan ja pastettaa teksti takaisin.

Kun BOM puuttuu tiedostosta, niin editori ei mahdollisesti osaa katsoa onko tiedosto UTF-8:aa vaiko ei. Scite ei osaa, tuleepahan heti huomattua onko tiedosto UTF-8:aa tahi ei.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta