Zur Navigation

RSS-Feed [2]

11 Markus

Ich habe auch keine andere Lösung mehr gefunden.

Falls Interesse, hier die etwas erweiterte Version Deiner Methode:


   function isoChar2Code($text)
   {
      $arrayOrg  = array('ß'     ,'à'     ,'á'     ,'ã'     ,'ä'     ,'â'     ,'ç'     ,'è'     ,'é'     ,'ê'     ,'ë'     ,'ì'     ,'í'     ,'î'     ,'ï'     ,'ñ'     ,'ò'     ,'ó'     ,'ô'     ,'õ'     ,'ö'     ,'ù'     ,'ú'     ,'û'     ,'ü'     ,'ý'     ,'ÿ'     ,'À'     ,'Á'     ,'Ã'     ,'Ä'     ,'Â'     ,'Ç'     ,'È'     ,'É'     ,'Ê'     ,'Ë'     ,'Ì'     ,'Í'     ,'Î'     ,'Ï'     ,'Ñ'     ,'Ò'     ,'Ó'     ,'Ô'     ,'Õ'     ,'Ö'     ,'Ù'     ,'Ú'     ,'Û'     ,'Ü'     ,'Ý');
      $arrayConv = array('ß','à','á','ã','ä','â','ç','è','é','ê','ë','ì','í','î','ï','ñ','ò','ó','ô','õ','ö','ù','ú','û','ü','ý','ÿ','À','Á','Ã','Ä','Â','Ç','È','É','Ê','Ë','Ì','Í','Î','Ï','Ñ','Ò','Ó','Ô','Õ','Ö','Ù','Ú','Û','Ü','&#221');
   
      $text = str_replace($arrayOrg, $arrayConv, $text); 
   
      return $text;
   }


Edit:
Uups, etwas lang die Zeile :-)

Versuch mal bei der Ausgabe noch folgende Zeile einzufügen:

 
$text = eregi_replace('[^[:space:]]{80}', '\0 ', $text);

Damit wird alle 80 Zeichen ein Leerzeichen eingefügt.

Edit 2:
Warum wird die Zeile nicht als Code dargestellt ?

29.12.2004 21:39 | geändert: 29.12.2004 21:43

12 Jörg

Danke für die ausführlichere function und auch für den Zeilenbrecher :)

wegen dem nicht funktionierenden BBCode muss ich gleich nochmal schauen..

29.12.2004 22:41

13 suls (Gast)

So. Hab ne schön generische Funktion draus gemacht:
function encodeNumeric($s) {
$s = iconv("UTF-8", "ISO-8859-1", $s);
$tbl = get_html_translation_table(HTML_ENTITIES,ENT_QUOTES);
foreach ($tbl as $char => $entity) {
$a[$char] = '&#'.ord($char).';';
}
$s = strtr($s,$a);

return $s;
}

09.03.2005 13:01

14 Jörg

Danke :), so ist natürlich noch besser

09.03.2005 13:16

15 rockie

tach die herren,
auch wenn ich jetzt vielleicht total doof frag, aber warum bitte konvertiert ihr den string in der funktion EncodeNumeric von utf-8 in iso-8859-1 - php speichert doch standardmässig in diesem zeichensatz, also in iso-8859-1. oder seh ich da jetzt was total falsch...
ausserdem scheint die fehlermeldung
Your feed appears to be encoded as "ISO-8859-1", but your server is reporting "US-ASCII"
etwas mit den apache-einstellungen zu tun haben. wisst ihr, was da genau zu tun ist?

gruss
hans

ps: kämpfe seit zwei tagen mit genau denselben problemen und bin bald am verzweifeln.

05.11.2005 23:15

16 Jörg

Hallo Hans,

wenn du das Feed mit PHP erzeugst, kannst du mit der Funktion header() (vor der eigentlichen Ausgabe) den HTTP-Header überschreiben:

header('Content-Type: text/xml; charset=iso-8859-1');

Danach stimmen die Angaben im HTTP-Header und im Feed überein und die Fehlermeldung sollte verschwinden.

Die Codierung von Markus hatte ich wegen Thunderbird eingebaut, da das Programm bei dem Format RSS 1.0 Sonderzeichen nach iso-8859-1 auch dann nicht akzeptierte, wenn dieser Zeichensatz im HTTP-Header angegeben war.

mfG Jörg

06.11.2005 01:03

17 rockie

aha, jörg, ich verstehe...
dann hab ich aber das problem, dass ich die datei nicht aus php heraus erzeuge, sondern mir quasi eine textdatei als gerüst genommen hab, die ich beim eintragen eines neuen items zeilenweise zerlege, das neue item oben einfüge und das letzte rausschmeisse, sofern 15 items in der datei stehen.
damit hilft mir also die lösung mit der header-funktion nicht weiter - also doch ran an die apache-config... seh ich das richtig?
ich hab ein selbstprogrammiertes cms und hab beim anlegen von inhalten nun zwei formularfelder für den feed eingefügt, so das beim anlegen jedes inhaltes durch eingaben in diesen zwei feldern ein eintrag im feed erreicht werden kann. in der verarbeitung wird halt dann der jeweilige inhalt in die db geschrieben und andererseits die xml-datei vom skript neu aufgebaut.
achja, noch eine frage. was machst du denn, wenn einfache oder doppelte anführungszeichen im text vorkommen? bei mir werden diese von php automatisch mit einem backslash maskiert und erscheinen inkl. backslash in der xml-datei. hab die backslashes einfach durch nen leeren string ersetzt - hoffe, das problem ist damit gelöst. machst du das ähnlich?
wenn ich dir jetzt noch weiter auf die nerven gehen darf: welche rss-version bevorzugst du denn? naja, offensichtlich die version 1.0 - aber warum? nur mal interessehalber. weiss nämlich noch nicht so recht, auf welche version ich mich da festlegen soll - bzw. was die vor- bzw. nachteile der einzelnen versionen sind...

gut n8 und vielen dank schon mal
hans

06.11.2005 01:40

18 Jörg

Zitat von rockie
dann hab ich aber das problem, dass ich die datei nicht aus php heraus erzeuge, sondern mir quasi eine textdatei als gerüst genommen hab, die ich beim eintragen eines neuen items zeilenweise zerlege, das neue item oben einfüge und das letzte rausschmeisse, sofern 15 items in der datei stehen.

Das heißt, du erstellst die Datei manuell?

Du kannst aber auch PHP in einer .xml Datei zur Anwendung bringen, mit folgendem Eintrag in der .htaccess:

AddType x-mapp-php4 .xml

was machst du denn, wenn einfache oder doppelte anführungszeichen im text vorkommen?


Die Slashes entferne ich vor der Ausgabe mit der PHP-Funktion stripslashes().

welche rss-version bevorzugst du denn? naja, offensichtlich die version 1.0 - aber warum? nur mal interessehalber. weiss nämlich noch nicht so recht, auf welche version ich mich da festlegen soll - bzw. was die vor- bzw. nachteile der einzelnen versionen sind...

Ich hatte RSS 1.0 ausgewählt, da es auf dem vom W3C standardisierten Format RDF aufbaut. Aber ich werde den Feed irgendwann auch noch RSS 2.0 und auch Atom anbieten

mfG Jörg

06.11.2005 02:43

19 rockie

hallo jörg,
danke erstmal für deine antwort...
also, ich habe eine xml-file, die ich am anfang sozusagen als schablone mit den grundsätzlichen daten und einträgen anlege. wenn ein neuer eintrag in den feed kommt, wird die xml-datei zeilenweise in eine temporäre datei kopiert, beim auftreten des ersten eintrags wird dann der neue eintrag erst eingefügt, dann wird weiter zeilenweise die ursprüngliche xml-datei weiter in die tmp-datei geschrieben. abschliessen wird diese dann in die ursprüngliche datei umbenannt...
mach ich da etwas zu kompliziert?
und genau deshalb frag ich mich auch, wie du die header-funktion zum einsatz bringst. die kann ich doch nicht einsetzen, wenn ich die daten in eine datei schreib. du musst doch auch eine datei schreiben und die ursprünglichen einträge erst rauslesen und nach unten schieben, oder seh ich da was komplett falsch...

gruss
hans

06.11.2005 13:06

20 Jörg

Hallo Hans,

du hast dann ein statische xml-Datei, aber auch diese Schablone könntest du entsprechend am Anfang erweitern. Der Anfang der XML-Datei dieses Forums würde statisch z.B. so aussehen:


<?php
header('Content-Type: text/xml; charset=iso-8859-1');
echo "<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n";
?>
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns="http://purl.org/rss/1.0/"
>
<channel rdf:about="http://forum.joergkrusesweb.de/feeds/1-0.xml">
<title>Jörgs Webmaster Forum</title>
<description>
Forum Marke Eigenbau zu den Themenbereichen XHTML, CSS, PHP und Suchmaschinenoptimierung.
</description>
<link>http://forum.joergkrusesweb.de/</link>
<items>
<rdf:Seq>
<rdf:li resource="https://joergs-forum.de/rss-feed-t-54-2#p19"/>
... usw. ...

Die Datei muss dann entweder noch die Endung .php aufweisen, oder es muss wie in POsting 18 beschrieben in der .htaccess einen Eintrag geben, dass auch .xml Dateien durch den PHP Parser geschickt werden.

mfG Jörg

06.11.2005 14:46