Tervehdys!
Käytössäni on MySQL Server 4.1, PHP 5.0.4, MyODBC ja Apache HTTP Server 2.0.54 - Windows XP -alustana ja selaimena uusin Mozilla Firefox.
Ongelma: Ääkköset ilmestyvät sivuilleni välillä aivan oikein, mutta välillä niiden tilalle tulee ? -merkki. Joten missä on vika? Onko vika PHP:ssä (täytyykö muokata jtn. php.ini:ssä), Apachessa (täytyykö konfiguroida jtn) vai onko vika kenties selaimessani?
kertokaahan taas joku minua viisaampi...muilla samanlaista ongelmaa?
Tuo johtuu virheellisestä merkistömäärityksestä. Lisää alla esitelty asetus apachen httpd.conf - tiedostoon. Esimerkki olettaa, että olet tallentanut tiedostot käyttäen ISO-8859-15 - merkistöä, joka on yleinen suomenkielisissä järjestelmissä.
Asetuksen avulla Apache lähettää www-selaimelle tiedon, että esiteltävä sisältö käyttää kyseistä merkistöä. Huomaathan vielä muokata jo olemassa olevaa asetusta, etkä lisää vain loppuun uutta riviä.
AddDefaultCharset ISO-8859-15
Minulla on ollut joskus samanlainen ongelma Mozillalla. Vieläpä juuri niin, että toisinaan sivu näkyy kunnollisesti, toisinaan taas vinoneliön muotoisin kysymysmerkein. Tämän takia ongelma on merkillinen. Ovatko muut havainneet vastaavaa?
Minulla on kanssa ilmennyt sama ongelma kuin Antilla (FireFox selaimena). Tympäännyin ja muutin ääkköset entiteeteiksi.
Tuo, miten ääkköset näkyvät, riippuu kahdesta asiasta:
1) Mitä koodausta tiedosto oikeasti on
2) Mitä koodausta palvelin väittää sen olevan
Jos nuo kaks ei ole samoja näkyy ääkköset yleensä miten sattuu.
Noita kysymysmerkkejä vinoneliön sisällä (tai laatikoita, jos saatavilla ei ole fonttia, jossa tuollainen merkki olisi) saa yleensä aikaan sillä, että tiedosto on oikeasti ISO-8859-1(5):sta (tai windows-1252:sta), mutta palvelin väittää sen olevan UTF-8:a, jolloin selain parsii sivun UTF:nä.
Jos yhdistelmä on pielessä toisinpäin (tiedosto on UTF-8:a, mutta palvelin väittää sen olevan ISO-8859-1(5):sta) näkyviin tulee kaks merkkiä (ä, À, tai muuta vastaavaa).
Itselläni on tapana tunkea kaikkien PHP-tiedostojen alkuun rivi header('Content-Type: text/html; charset=UTF-8'); jolloin HTTP-otsakkeissa kulkee oikea merkistö (omat tiedostoni ovat aina UTF-8:a) siitä riippumatta, mikä palvelimen asetus sattuu olemaan.
Sitä, minkä koodauksen palvelin tiedostolle kertoo voi tutkia esimerkiksi Lynxillä: lynx -head -dump http://osoite
Se merkkikoodaustieto löytyy riviltä, joka alkaa Content-Type
Kannattaa myös säätää oma editori sellaiseksi, että se tallentaa tiedostot sillä koodauksella, jota itse tykkää käyttää. Vim:ssä tuo hoituu asettamalla fileencoding (jolle lyhytnimi on fenc) .vimrc:ssä. Lisätietoja :help fileencoding
Jos tulee tarve konvertoida suuri määrä tiedostoja koodauksesta toiseen, tämä PHP-skripti voi osoittautua hyödylliseksi.
Aihe on jo aika vanha, joten et voi enää vastata siihen.