ugrás a tartalomhoz

Ékezetes karakter probléma

szpistomi · 2009. Dec. 28. (H), 15.51
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)

<?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!";
		}
}
 
1

karakter kódolás

ironwill · 2009. Dec. 28. (H), 19.18
Szia!

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
2

Megoldva...

szpistomi · 2010. Jan. 10. (V), 17.44
Hali!

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):
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
Ezt cseréltem erre:
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">
És helyreállt a rend...
Figyelmetlen voltam, tanultam belőle.