Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: PHP, MySQL, UTF-8

Sivun loppuun

karvinen [26.01.2015 20:36:43]

#

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...

Metabolix [26.01.2015 20:47:09]

#

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?

karvinen [26.01.2015 21:31:11]

#

Olen katsellut tietokannassa olevia tietoja phpmyadmin ohjelmasta.
Ainakin phpmyadmin näyttää html koodissa olevan oikein utf-8.

<meta charset="utf-8" />

Metabolix [26.01.2015 21:38:34]

#

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.

karvinen [26.01.2015 21:40:39]

#

Tällähän se ongelma ratkesi, kiitokset.

mysql_query("SET NAMES utf8", $link );

PHP ja Mysql välinen yhteys siellä ilmeisesti vaan takkuili...

karvinen [01.02.2015 17:48:00]

#

Jatketaan tähän samaan, kun ongelmakin on aikalailla sama...

$otsikko "ääääääääää";

Jos tulostan $otsikko muuttujan sisällön, niin se tulostuu:
print $otsikko;
ääääääääää
Jos pätkin muuttujan:
print $otsikko;
$otsikko = substr($otsikko,0,5);
ääää�

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ä.

Metabolix [01.02.2015 17:54:20]

#

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?

peran [01.02.2015 18:05:32]

#

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.


Sivun alkuun

Vastaus

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

Tietoa sivustosta