Jouduin vaihtamaan palveluntarjoajaa niin samalla tuli ääkkös ongelma.
Textareasta muuttujaan ei tallennu mitään, jos siellä skandeja. Toisella palveluntarjoajalla toimi ja nykyäänkin entiset kirjoitukset näkyy oikein. Olen laittanut nykyisen palveluntarjoajan ilmoittaman koodauksen.
<meta http-equiv="Content-Language" content="fi"> <meta http-equiv="Content-Type" content="text/html"; charset="ISO-8859-15">
Mitä minun vielä pitäisi laittaa, että saan skandit tallentumaan?
Katso vaikka headerit että mitä se palvelin ilmoittaa. Jos headereissa lukee charset UTF8 ja laitat meta-korvikkeella ISO-8859-15 niin oikea headeri menee edelle.
Tyhmä kysymys, mistä luen headerit?
Useimmissa selaimissa on kehittäjäkonsoli, jossa ne voi katsoa.
Esimerkiksi Chromessa painat ctrl+shift+J. Valitse Network -lehti ja lataa sivu uudelleen. Kun klikkaat listalta sivua (luultavasti ensimmäinenä) niin sieltä löytyy ensimmäisenä välilehtenä "headers". Response Headers on ne jotka palvelin on palauttanut selaimelle.
Kiitos, löytyi. Tällaista palautti:
Content-Encoding:gzip
Content-Type:text/html; charset=ISO-8859-1
Date:Sat, 20 Feb 2016 12:41:16 GMT
Server:Apache
Transfer-Encoding:chunked
Vary:Accept-Encoding
ISO-8859-1 oli minulla aikaisemmin, mutta kun se ei toiminut niin muutin sen aikaisemmin ilmoittamaani koodaukseen.
Jaa, sitten menee kyllä noilla lähtötiedoilla vaikeaksi arvioida missä vika on. Periaatteessa useimmiten skandit toimivat ihan ok, jos sekä lomakkeenlähetys-, lomakkeenkäsittely- että tuloksen näyttösivulla on sama koodaus.
Ehkä lomakkeen käsittelijässä on jotain outoa.
Niinpä, tämä ohjelma on jo monta vuotta toiminut ongelmitta, palveluntarjoaja vain vaihtui. Huomasin äsken kun testailin uudelleen niin tässä koodinpätkässä
$viesti = htmlspecialchars($viesti);
tapahtuu muuttujan tyhjeneminen. Onko sillä merkitystä, että php-versio muuttunut 5,1 -> 5,5?
Missä toi viesti -muuttuja alustetaan.. Ja siis toiko varmasti toimii, jos viestissä ei ole ääkkösiä?
Enemmän ehkä vaikuttaa PHP:na asetukset kuin versio. Tosin 5.5:ssä esim. register_globals ei enää ole tuettu kun 5.1:ssä oli, mutta vaikea uskoa että kukaan 5.1:ssäkään sitä pitäisi päällä.
Kyllä toimii jos en laita ääkkösiä viestiin. Muuttuja alustetaan textarean tallennusnapin painalluksen jälkeen
$viesti = $_POST["viesti"];
tuossa vaiheessa teksti ja ääkköset on mukana.
Ah joo, PHP 5.4 eteenpäin htmlspecialcharsin oletuskoodaus on utf8, eli laita
$viesti = htmlspecialchars($viesti, 'ISO-8859-1');
Tai ehkä voisit ajatella sivujesi modernisointia käyttämään kokonaan Unicodea.
Harmi, ei toimi vieläkään. Muutoin kyllä voisi modernisoida, mutta joskus kun sitä yritin niin tuli ongelmia käyttäjien taholta, ei toiminut ääkköset heillä.
Tämä sivusto on toiminut jo vuosia, joten pitäisi kaikki tallennetut tekstit koodata uudelleen. Minun täytyy nyt lähteä asioille, joten palaan asiaan huomenna. Kiitos paljon avuliaisuudessta.
Grezin vinkki voisi toimia paremmin, jos sen merkistöparametrin laittaisi oikeaan kohti eli kolmanneksi parametriksi.
$viesti = htmlspecialchars($viesti, ENT_QUOTES, 'ISO-8859-1');
Ehkä on järkevää tehdä tästä oma funktio, esim. my_html, ettei tarvitse noita parametreja kopioida niihin kaikkiin kohtiin, joissa htmlspecialchars-funktiota käytetään. (Toivottavasti käytetään?)
Hienoa, nyt alkoi toimimaan. Kiitos Metabolix!
Aihe on jo aika vanha, joten et voi enää vastata siihen.