Ékezetes karakter probléma
Hali!
Bocsi de ismét megakadtam, ráadásul olyan témában, amihez hasonlókat találtam, csak még mindig nem tiszta...
Íródik egy weboldal, aminek MySQL-ben tárolt tartalmát egy egyszerű, webes felületen lehet majd szerkeszteni.
A nyelvi kódolással van bajom. A PHP fájlok UTF-8 kódolásúak, az adatbázis táblák egybevetése "utf8_unicode_ci" a PHPMyAdmin szerint.
Ha a PHPMyAdmin-ban írok át egy content értéket, az oldal nyilvános része, és a PHPMyAdmin is szépen megjelenítik a beírt ékezetes karaktereket. A webszerkesztő PHP megjelenítése viszont már gáz, mert ott kérdőjelek jelennek meg az ékezetes karakterek helyén. Ha ezeket javítom, és a webes szerkesztővel íratom be az adatbázisba, akkor a szerkesztővel újra megnyitva teljesen jól néz ki, de az oldal nyilvános része, és a PHPMyAdmin is rossz karaktereket ad vissza.
Hogyan lehetne rávenni őket, hogy működjenek együtt?
Valamit kifelejtettem, csak nem tudok rájönni, hogy mit...
A szerkesztő kódja: (csak a "dolgozó" rész, az oldal indexe több fájl include-olásával készül, azokat nem mellékelem, ez a szakasz is include-olva van, másik fájlból)
■ Bocsi de ismét megakadtam, ráadásul olyan témában, amihez hasonlókat találtam, csak még mindig nem tiszta...
Íródik egy weboldal, aminek MySQL-ben tárolt tartalmát egy egyszerű, webes felületen lehet majd szerkeszteni.
A nyelvi kódolással van bajom. A PHP fájlok UTF-8 kódolásúak, az adatbázis táblák egybevetése "utf8_unicode_ci" a PHPMyAdmin szerint.
Ha a PHPMyAdmin-ban írok át egy content értéket, az oldal nyilvános része, és a PHPMyAdmin is szépen megjelenítik a beírt ékezetes karaktereket. A webszerkesztő PHP megjelenítése viszont már gáz, mert ott kérdőjelek jelennek meg az ékezetes karakterek helyén. Ha ezeket javítom, és a webes szerkesztővel íratom be az adatbázisba, akkor a szerkesztővel újra megnyitva teljesen jól néz ki, de az oldal nyilvános része, és a PHPMyAdmin is rossz karaktereket ad vissza.
Hogyan lehetne rávenni őket, hogy működjenek együtt?
Valamit kifelejtettem, csak nem tudok rájönni, hogy mit...
A szerkesztő kódja: (csak a "dolgozó" rész, az oldal indexe több fájl include-olásával készül, azokat nem mellékelem, ez a szakasz is include-olva van, másik fájlból)
<?php
if (!isset($szerk_oldal_ID)) {
//ez a választó
echo "<form name=oldal_valaszto id=1 method=post action='index.php?oldal=webszerkeszto'>A <select size=1 name=szerk_oldal_ID>";
$oldalak_szama = mysql_result(mysql_query('SELECT COUNT(*) FROM `bg_page`'), 0);
$pid = 1;
do {
$sql=sprintf("SELECT * FROM `bg_page` WHERE `id`='$pid'");
$lekerdezes=mysql_query($sql);
$adat=mysql_fetch_assoc($lekerdezes);
if (isset($adat['name'])) {
echo "<option value=";
echo $adat['id'];
echo ">";
echo $adat['name'];
echo "</option>";
}
$pid++;
}
while ($pid <= $oldalak_szama);
echo "</select> oldal szerkesztése. <input type=submit value=Mehet!></form>";
} else if (isset($szerk_oldal_ID) & !isset($valtoztat)){
//ez a szerkesztő
echo "Az oldal ID-je: " . $szerk_oldal_ID . "<br>";
$query=sprintf("SELECT * FROM `bg_page` WHERE `id` like '$szerk_oldal_ID'");
$lekerdezes=mysql_query($query);
$adat=mysql_fetch_assoc($lekerdezes);
echo "<form action='index.php?oldal=webszerkeszto&valtoztat=igen' method=post>";
echo "<input type=hidden name=szerk_oldal_ID value=".$szerk_oldal_ID.">";
echo "Menü neve: <input type=text name=menu_name size=30 value=".$adat['name']."><br> ";
echo "Menü tartalma: <a href=tag.php target=new>A használható HTML parancsok</a><br>
<center>
<textarea rows=20 name=content cols=130>".$adat['content']."</textarea>
</center>";
mb_convert_encoding($_POST['content'], 'ISO-8859-2', 'UTF-8');
echo "<p align=right><input type=submit value=Változtatás></form></p>";
} else if (isset($valtoztat)) {
//ez az adatbázis író rész
$query = "UPDATE `bg_page` SET `name` = '$menu_name',
`content` = '$content' WHERE `id` = '$szerk_oldal_ID' ;";
$result = mysql_query($query);
if (mysql_affected_rows() > 0) {
// Siker
echo "A módosítás sikerült!";
} else {
// Bukás
echo "A módosítás nem sikerült, vagy egyező tartalom!";
}
}
karakter kódolás
Ellenőrizni kellene, hogy a request, response kódolások mindenhol UTF-8-asok legyenek.
Nekem ilyen esetben segített, ha a mysql kapcsolat(ok)nál is beállítottam a kódolást.
http://php.net/manual/en/function.mysql-set-charset.php
Egyébként van különbség a böngészők, karakter kódolási szabály kezelése között is.
(szép kifejezés)
Érdekesség képpen:
http://kore-nordmann.de/blog/php_charset_encoding_FAQ.html#does-accept-charset-help-in-html-forms
üdv, Gábor
Megoldva...
Nos, ismét elővettem az oldalt, és újra átnéztem az egészet. Egy soron buktam el, ami include-olva volt (a fejlécben):
Figyelmetlen voltam, tanultam belőle.