Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: MySQL ja rikkinäiset ääkköset

juhaz [02.07.2013 09:58:24]

#

Minulla on "hakurobotti", joka selaa nettisivuja ja tallentaa sisällön tietokantaan. Joillakin sivuilla toimii erinomaisesti (jos on UTF-8), mutta sitten muilla sivuilla tallentaa tietokantaan rikkinäisiä ääkkösiä mallia "ÃÂ" ja "ä".

Miten korjaan sen helposti?

Grez [02.07.2013 10:13:52]

#

Päätät ensin missä muodossa ne haluat tallentaa tietokantaan. Sitten tarkistat missä muodossa sivut ovat ja jos eri muodossa kuin tietokantasi niin muunnat ne oikeaan muotoon ennen tallentamista.

Helposti? No, en tiedä millä kielellä koodaat, mutta itse käyttämilläni työkaluilla tuo ei vaadi oikeastaan mitään. Tai siis, vaatii enemmän työtä että saa tallentumaan väärin.

Metabolix [02.07.2013 10:17:59]

#

Olennaista olisi tietää, miten olet määritellyt tietokantayhteyden merkistön ja miten käsittelet ladattuja nettisivuja.

Sanot, että UTF-8 toimii mutta muu ei. Oletko varma? Kaksimerkkinen "ä" viittaa siihen, että juuri UTF-8 olisi ongelma: UTF-8-koodattu "ä" näyttää Windows-1252-merkkeinä tulkittuna parilta "ä", ja edelleen UTF-8-koodattu "ä" näyttää Windows-1252-merkeiltä "ä". Jos ongelma olisi toisin päin, virhe näyttäisi toisenlaiselta.

juhaz [02.07.2013 11:23:01]

#

Kieli on PHP, oma sivu on UTF-8 ja MySQL-tietokanta on säädetty noudattamaan merkistökoodausta UTF-8. Yhdellä sivulla millä testasin niin se sivu on iso-8859-1 ja ääkköset menee rikki.

EDIT: mb_convert_encoding korjasi.

Metabolix [02.07.2013 13:08:39]

#

Ääkköset eivät voi millään mennä tuohon suuntaan rikki, jos tallennettavan datan koodaus on ISO-8859-1 ja tietokannan UTF-8. Selvästi teet koodissasi jonkin muunnoksen.

Sinun pitäisi nyt joka tapauksessa tunnistaa datan koodaus ja muuttaa se oikeaksi. Tutut merkintäpaikat koodaukselle ovat HTTP-otsikko (Content-Type: text/html; charset=UTF-8), vastaava meta-tagi HTML-koodissa sekä nykyaikaisempi meta-tagin charset-attribuutti. Jos mitään ei löydy, koodaus on käytännössä Windows-1252. Voit muuttaa merkit iconv-funktiolla, tai jos ISO-8859-1 ja UTF-8-riittävät, voit käyttää funktiota utf8_encode.

Grez [02.07.2013 13:47:24]

#

Mulle tulee mieleen sellainenkin että sieltä kannasta tulisi ihan OK dataa mutta sitten palvelin ei antaisi mitään hdeaderia ja sivu tulostettaisiin sellaisenaan ulos ja siellä olisi code page metatagina Windows-1252.

No tää nyt on taas tällaista turhaa arvausta ongelmaan jonka saisi selvitettyä minuutissa jos olisi itse tekemässä.

juhaz [02.07.2013 15:18:42]

#

Joo en mä tiedä mistä johtui tai ei ainakaan omasta koodistani, kun en tehnyt mitään muutoksia merkistönkoodaukseen omassa koodissani. Käytän PHP Simple HTML DOM Parseria sivun sisällön lataamiseen ja sieltä tuli sitten rikkinäistä ääkköstä, kun yritin tallentaa tietokantaan. Mutta korjaantui tosiaan mb_convert_encoding-funktiolla.

Vastaus

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

Tietoa sivustosta