RSS-t készítenék PHP-vel, de aacute nem definiált
A problémám az hogy az sqlből kiszedett adatok kilistázása után kapok egy hibaüzenetet A következő nem definiált entitásra hivatkozott: 'Aacute'. Hiba történt a(z) 'http://localhost/feed.php' erőforrás feldolgo...
Gondoltam ékezet probléma lesz ezért egy kifejezetten ékezet nélküli adatot listáztam ki, az jól ment. Kódolást is beállítottam, nem segített.
■ Gondoltam ékezet probléma lesz ezért egy kifejezetten ékezet nélküli adatot listáztam ki, az jól ment. Kódolást is beállítottam, nem segített.
<?php
@mysql_connect("localhost", "x", "x") or die(mysql_error());
@mysql_select_db("x") or die(mysql_error());
header("Content-type: text/xml");
echo"<?xml version=\"1.0\" encoding=\"utf-8\" ?>";
echo"<rss version=\"2.0\">";
echo"<channel>";
echo"<title>X</title>";
echo"<description>X RSS Feed</description>";
echo"<link>http://x.hu</link>";
$query = mysql_query("SELECT id, cim, szoveg, datum, fnev_id, kat_id FROM news") or die(mysql_error());
while ($rows = mysql_fetch_assoc($query)) {
echo"<item>";
echo"<title>{$rows['cim']}</title>";
echo"<description>a</description>";
echo"<link>http://allgadgetsreviewed.com/nokia3650.html</link>";
echo"</item>";
}
echo"</channel>";
echo"</rss>";
?>
rossz a charset
Rosszul van a DB-ben a szöveg eltárolva. html_entity_decode környékén nézz körül a php.net -en.
Valószínűleg iso-8859-1-ben van eltárolva a szöveged, html entity-kkel.
S ez nem UTF-8.
iso-8859-2
iso-8859-1-2
A tábláé is?
Az oszlopé is?
A mysqld-é is?
A connection-é is?
Amúgy lehet iso-8859-2 is, de semmiképpen sem utf-8, akkor miért várod, hogy a html entity-ket elfogadja?
iso-8859-2
megoldás?
megoldás kettő is
- A kimenő adatokat átereszted egy html_entity_decode-on, meg a speciális karaktereket kézzel lecseréled (elvileg a fgv. nem támogatja az iso-8859-2-t, ezért néhány maradékot neked kell lecserélned) Egyébként ezt már írtam, de úgy tűnik olvasni lusta vagy. (php.net, html_entity_decode fgv.)
- Fogod az egész hóbelebancot és átteszed UTF-8-ba, ahogyan már az elején is kellett volna. Minden HTML oldalt, minden adatot a DB-ben, mindent. Ez már ér is valamit.
Utólag javítani az elcseszett charsetelést meglehetősen nyűgös feladat, ezért mindig érdemes előre gondolni rá, és UTF-8-at használni, az atombiztos.
utf8
"nem lehet" olyan nincs
De ha konzekvensen mindenütt UTF-8-at használsz, akkor gyakorlatilag mindenféle-fajta karaktert el tudsz tárolni, és az "é" mindenütt ugyanaz az "é" marad, és sehol sem lesz é. S éppen ez a lényeg.