Ei mene jakeluun, miksi php tallentaa tiedon mysql kantaan ä ja ö osalta väärin.
Php:llä haetaan tieto toiselta sivulta.
Tieto tulostetaan sivulle, se näkyy normaalisti "yhdistyvät" mysql kantaan se kuitenkin tallentuu "yhdistyvät".
Phpmyadmin ohjelman etusivu kertoo:
Palvelimen merkistö: UTF-8 Unicode (utf8)
Sivusto, miltä texti haetaan, käyttää utf-8 koodausta.
Apache2 oletus on utf-8.
Selaimen oletusmerkistö on utf-8
Php tiedostot on tallennettu käyttäen merkistökoodausta utf-8
Ei mene aivan jakeluun, mikä tuolla voi vielä olla poskellaan...
Olisiko sitten se viimeinen asia, jota et maininnut, eli MySQL-yhteyden merkistö? Aja ensimmäisenä kyselynä yhteyden muodostamisen jälkeen ”SET NAMES utf8
” tai vastaava.
Lisäksi jos tiedon tallennus ja tiedon haku tuottavat eri datan, selvästi niissä on käytetty jossain kohti erilaisia asetuksia. Ettei tarvitse niin paljon arvailla, missä kohti menee pieleen, voisit kokeilla tulostaa tekstin aina urlencode-funktiolla, jolloin ä-kirjain on joko %C3%A4 (UTF-8) tai %E4 (ISO-8859-1). Tässä tulostusmuodossa ainakin voi takuuvarmasti sulkea pois virheet selaimen, Apachen, PHP:n ja kooditiedostojen enkoodauksessa, ja jäljelle jäävät vain MySQL-yhteys ja MySQL-palvelin.
karvinen kirjoitti:
mysql kantaan se kuitenkin tallentuu "yhdistyvät".
Mistä olet katsonut, mitä tietokantaan tallentuu? Oletko varma, että katseluvaiheessa merkistö on oikein?
Olen katsellut tietokannassa olevia tietoja phpmyadmin ohjelmasta.
Ainakin phpmyadmin näyttää html koodissa olevan oikein utf-8.
<meta charset="utf-8" />
Se, että phpMyAdmin tuottaa UTF-8-muotoisia sivuja, ei kerro mitään tietokannan sisällöstä.
On aika turhaa katsoa kannan sisältöä erillisillä ohjelmilla (kuten phpMyAdminilla). Koodaa vain itse sivusi oikein (ml. SET NAMES utf8), ja jos ne toimivat, ole tyytyväinen.
Tällähän se ongelma ratkesi, kiitokset.
mysql_query("SET NAMES utf8", $link );
PHP ja Mysql välinen yhteys siellä ilmeisesti vaan takkuili...
Jatketaan tähän samaan, kun ongelmakin on aikalailla sama...
$otsikko "ääääääääää";
Jos tulostan $otsikko muuttujan sisällön, niin se tulostuu: print $otsikko; ääääääääää
muuttujan $otsikko viimeinen tulostettava merkki tulostuu väärin, jos se on ä tai ö.
Muuten tulostaa ok, ainoastaan tuo viimeninen merkin kohdalta näyttää ääkköset kysymysmerkkinä.
UTF-8-koodauksessa yksi merkki (character) voi käsittää useampia tavuja (byte). PHP:n tavalliset merkkijonofunktiot taas käsittelevät tavuja eivätkä merkkejä, jolloin esimerkiksi substr voi katkaista merkkijonon keskeltä merkkiä. �-merkki kertoo, että UTF-8-enkoodauksessa on virhe.
Voit käyttää mbstring-kirjastoa ja esim. funktiota mb_substr, kuten oppaassa neuvotaan. Toisaalta kannattaa miettiä, mikä oikeastaan on tarkoitus: haluatko todella katkaista tekstin tietyn merkkimäärän jälkeen, vai olisiko jokin parempi vaihtoehto?
Onkohan ongelmana se että ä - vie kaksi tavua ?
Minulla ainakin tulostuu seuraavaa...
<meta charset="utf-8" /> <?php //header = $otsikko="ääääääääää"; print $otsikko; print "<br />"; print substr($otsikko,0,5); print "<br />"; $otsikko="aaaaaaaaaa"; print $otsikko; print "<br />"; print substr($otsikko,0,5); print "<br />";/**/ ?>
phptulostaa kirjoitti:
ääääääääää
ää�
aaaaaaaaaa
aaaaa
Edit - Metabolix - kerkes ensiksi.
Aihe on jo aika vanha, joten et voi enää vastata siihen.