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