Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Miksi ääkkösten paikalla näkyy �-merkkejä?

Sivun loppuun

riksu [25.10.2015 17:27:22]

#

Mistä johtuu, että ääkköse muutetaan �-merkkiseksi?

Alhaalla esimerkkilause:
Funktio file_get_contents lukee tiedoston koko sis�ll�n merkkijonoon. Funktiota voi k�ytt�� seuraavasti

fergusq [25.10.2015 18:17:04]

#

Virhe saattaa johtua väärästä merkistökoodauksesta. Onko tuo teksti tiedostossa, nettisivulla vai missä?

riksu [25.10.2015 18:47:21]

#

tulostus tulee nettisivulle, kun ohjelma käynnistetään

Metabolix [25.10.2015 18:49:04]

#

Lue opas PHP:stä ja merkistöistä. Tallenna kaikki tiedostot UTF-8-muodossa ja ilmoita sivun otsikkotiedoissa oikea merkistö.

riksu [25.10.2015 20:00:19]

#

Kiitti. Nyt näyttää hyvältä -> "Funktio file_get_contents lukee tiedoston koko sisällön merkkijonoon. Funktiota voi käyttää seuraavasti".

Yucca [25.10.2015 20:14:19]

#

Johtuu käytännössä siitä, että ISO-8859-1-koodattua (tai Windows Latin 1 -koodattua) merkkidataa yritetään tulkita UTF-8-koodatuksi. Ääkkösten ISO-8859-1-koodatut muodot ovat tavuja, joita ei voi esiintyä UTF-8-koodauksessa, joten ohjelmat esittävät ne käyttäen �-merkkiä (REPLACEMENT CHARACTER). Yleisesti se osoittaa, että datassa on virhe merkkien koodauksen tasolla.

Asiaa on selostettu hiukan tarkemmin jutussa ”Rikkinäisiä ääkkösiä jo 50 vuotta”, Skrolli 2015.1, s. 40–, http://skrolli.fi/2015.1.graffiti.pdf

Korjauksena on, että data tallennetaan sen koodauksen mukaisena, jonka mukaan sitä tullaan tulkitsemaan, mihin täällä on jo viitattu. Tämä voisi tapahtua joko niin, että HTTP-otsakkeissa ilmoitetaan koodaukseksi ISO-8859-1, jos merkit on esitetty sen mukaan. Järkevämpi vaihtoehto on nykyisin lähes aina se, että koodaukseksi vaihdetaan UTF-8 (ja tarkistetaan, että HTTP-otsakkeet ilmoittavat sen).

feenix [26.10.2015 09:08:45]

#

Yucca kirjoitti:

Johtuu käytännössä siitä, että ISO-8859-1-koodattua (tai Windows Latin 1 -koodattua) merkkidataa yritetään tulkita UTF-8-koodatuksi. Ääkkösten ISO-8859-1-koodatut muodot ovat tavuja, joita ei voi esiintyä UTF-8-koodauksessa

Taas väärin. Esimerkiksi ä on 0xE4 ISO-8859-1:ssä ja tuo tavu voi ihan hyvin esiintyä UTF-8-koodauksessa, vaikkapa jos koodattava merkki vaatii kolme tavua esityksekseen. Tällöin ensimmäinen tavu on välillä 0xE0-0xEF. Ja jos vaikka kirjoitan ISO-8859-1:llä ä&& tuo on ihan validia UTF-8:aakin ja tuottaa merkin 䣣.

Ilman sopivia jatkotavuja ei tuo tavu toki voi esiintyä, mutta voisi vähän tarkemmin sanoa.

Markka [02.12.2015 19:17:59]

#

Mikäli kyseessä HTML koodi pistä alkuun
Mikäli käytät UTF-8 pistä headiin

<meta http-equiv="content-type" content="text/html;charset=utf-8"/>

Jos käytät ISO-8859-1 (Yleensä notepadissa)

<meta http-equiv="content-type" content="text/html;charset=ISO-8859-1"/>

HTML5 [02.12.2015 20:14:23]

#

Markka kirjoitti:

Mikäli kyseessä HTML koodi pistä alkuun – –

Tämä on nykyaikaisempi tapa:

<meta charset="utf-8"/>

Sijoita se head-osan ensimmäiseksi elementiksi, jolloin se vaikuttaa koko tiedostoon. (Esimerkiksi, jos ennen meta charset -määritystä on title-elementti, ei määritys vaikuta siihen, jolloin kyseisen elementin teksti näkyy väärin.)

Toinen vaihtoehto, jota voi käyttää myös edellä mainitun ohessa, on määrittää merkistökoodaus HTTP-otsikossa Content-Type. PHP:ssä se onnistuu seuraavasti:

header('Content-Type: text/html; charset=utf-8');

(Merkkijonon utf-8 tilalle voi sijoittaa myös toisen merkistökoodauksen nimen, jos sellaista käyttää.


Sivun alkuun

Vastaus

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

Tietoa sivustosta