Hi ich mal wieder,
habe zwei Headline-Blöcke die aus rdf dateien erstellt werden auf meiner
Seite. Nun das Problem: immer wenn in der Überschrift für ne Url ein Anführungszeichen vorkommt zerschießt es mir den Block total.(you have a error near... die stelle wo die Anführungszeichen sind)
Hat jemand ne Idee wie man das ändern kann.
Ciao Henne
[Editiert am 2/4/2003 von henne]
Hallo !
Ich denke, die Anführungszeichen müssen maskiert werden ( voranstellen eines / ). Wenns nicht anders geht, musst du den Betreffenden Text vorher parsen oder mit der Funktion addslashes bearbeiten
---> $textNeu = addslashes($zuBearbeitenderText) <---
Das könnte dann vielleicht funktionieren.
MfG
jubilee
[Editiert am 2/4/2003 von SiteAdmin jubilee]
Hi Jubilee,
also so sieht der Code aus mit der die headlines erstellt werden(ist aus der mainfile.php)
er holt sich ja die Überschriften z.B. von heise aus ner rdf datei, die Anführungszeichen kommen also schon automatisch mit wo könnte ich jetzt die funktion addslashes einfügen damit das Problem verschwindet.
function headlines($bid, $cenbox=0) {
global $prefix, $dbi, $admin;
$cont = 0;
$result = sql_query("select title, content, url, refresh, time from ".$prefix."_blocks where bid='$bid'", $dbi);
list($title, $content, $url, $refresh, $otime) = sql_fetch_row($result, $dbi);
$past = time()-$refresh;
if ($otime < $past) {
$btime = time();
$rdf = parse_url($url);
$fp = fsockopen($rdf['host'], 80, $errno, $errstr, 15);
if (!$fp) {
$content = "";
$result = sql_query("update ".$prefix."_blocks set content='$content', time='$btime' where bid='$bid'", $dbi);
$cont = 0;
if ($cenbox == 0) {
themesidebox($title, $content);
} else {
themecenterbox($title, $content);
}
return;
}
if ($fp) {
if (empty($rdf['query'])){
fputs($fp, "GET " . $rdf['path'] . " HTTP/1.0\r\n");
}
else {
fputs($fp, "GET " . $rdf['path'] . "?" . $rdf['query'] . " HTTP/1.0\r\n");
}
fputs($fp, "HOST: " . $rdf['host'] . "\r\n\r\n");
$string = "";
while(!feof($fp)) {
$pagetext = fgets($fp,300);
$string .= chop($pagetext);
}
fputs($fp,"Connection: close\r\n\r\n");
fclose($fp);
$items = explode("</item>",$string);
$content = "<font class=\"content\">";
for ($i=0;$i<10;$i++) {
$link = ereg_replace(".*<link>","",$items[$i]);
$link = ereg_replace("</link>.*","",$link);
$title2 = ereg_replace(".*<title>","",$items[$i]);
$title2 = ereg_replace("</title>.*","",$title2);
if ($items[$i] == "") {
$content = "";
sql_query("update ".$prefix."_blocks set content='$content', time='$btime' where bid='$bid'", $dbi);
$cont = 0;
if ($cenbox == 0) {
themesidebox($title, $content);
} else {
themecenterbox($title, $content);
}
return;
} else {
if (strcmp($link,$title)) {
$cont = 1;
$content .= "<tr><td valign=\"top\"><img src=dot.gif> </td><td valign=\"top\"><a href=\"$link\" target=\"new\">$title2</a><br></tr></td>\n";
}
}
}
}
sql_query("update ".$prefix."_blocks set content='$content', time='$btime' where bid='$bid'", $dbi);
}
$siteurl = ereg_replace("http://","",$url);
$siteurl = explode("/",$siteurl);
if (($cont == 1) OR ($content != "")) {
$content .= "<br><a href=\"http://$siteurl[0]\" target=\"blank\"><b>"._HREADMORE."</b></a></font>";
} elseif (($cont == 0) OR ($content == "")) {
if(is_admin($admin)){ #by ae u. Joschau
$content = "<font class=\"content\">"._RSSPROBLEM."</font>";
}
else{
return;
}
}
if ($cenbox == 0) {
themesidebox($title, $content);
} else {
themecenterbox($title, $content);
}
}
Ciao Henne :cry
Hallo !
Ich würde hier einmal ansetzen.
Zitat< /font>$pagetext = fgets($fp,300);
< /font>$string .= chop($pagetext);
und das versuchsweise einmal so abändern :
Zitat< /font>$pagetext = fgets($fp,300);
< /font>$string .= chop($pagetext);
$string=addslashes($string);
Keine Ahnung ob das klappt. Versuchs einfach einmal und gib mir Rückmeldung.
MfG
jubilee
Hi Jubilee,
danke ich probiers gleich mal aus und meld mich dann wieder.
Ciao Henne
Hu Jubilee,
also danke erst mal das mit den Anführungszeichen klappt jetzt aber dieses Zeichen ( ' ) schmeißt immer noch alles durcheinander.
Vieleicht haste ja noch ne Idee.
Ciao und danke Henne
Hmmmm ...
Das muss ich nicht verstehen.
Auch das einfache Anführungszeichen (Hochkomma) sollte
von dem addslashes () auch maskiert werden.
Schick mir das doch bitte einmal zu. Da muss man wohl mal genauer drauf schauen.
MfG
jubilee
Hi Jubilee,
das ging ja wieder fix. Brauch ich nicht schicken ist in jeder Nuke Version vorhanden auch beim VKP Maxi in der Mainfile.php >> funktion headlines
hab mich auch zu früh gefreut Fehler trat doch wieder auf ein bißchen genauer kann ich ihn jetzt eingrenzen.
Immer wenn in der ersten headline ein (") oder (') vorkommt und in den anderen headlines nocheimal das Zeichen vorkommt tritt es auf in der zweiten oder dritten u.s.w. werden die besagten Zeichen anstandslos angezeigt.
Hier mal die genauen Fehlermeldungen:
', time='1049450130' where bid='547'
description: You have an error in your SQL syntax near 'em-Up Ikaruga ab Mai auch in Europa
error in sql-statement: mysql_query, err-no: 1064
qry: update nuke_blocks set content='
kannst es Dir jetzt auch life ansehen auf meiner Seite lasse den Fehler mal ne Stunde stehen. Kannst Dich ja per PM melden ob Du jetz mal auf meiner Site schauen kannst dann kann ich den Fehler schneller wieder wegmachen.
Ciao Henne
[Editiert am 4/4/2003 von henne]
Ja ,kannst abschalten. Ich habs gesehen.
Du willst diese Funktion also in einen Block packen....
Ich schau mir das einmal in Ruhe an. er interpretiert auf jeden Fall das was die query's zurückgeben falsch.
Ich schau mal.
Geb Dir wieder bescheid.
MfG
jubilee
o.k. Danke
So !
Nimm mal diesen Quellcode für den Block (ist fertig, brauchst Du nur unter
block-RDF.php speichern.
Zitat<?php
if (eregi("block-RDF.php", $PHP_SELF)) {
Header("Location: index.php");
die();
}
$rdfsource = "http://www.heise.de/newsticker/heise.rdf";
$content = "<center><b>HEISE NEWS</center></b><br><br>\n\n";
$data = implode ("", file ($rdfsource));
preg_match_all("|<item>(.*)</item>|Uism",$data, $items, PREG_PATTERN_ORDER);
for ($i=0;$i<count($items[1]);$i++)
{
preg_match_all("|<title>(.*)</title>(.*)<link>(.*)</link>|Uism",$items[1][$i], $regs, PREG_PATTERN_ORDER);
$content = $content . "<a href=\"".$regs[3][0]."\" target='_blank'>".$regs[1][0]."</a><br><br>\n\n";
}
$content = $content . "<a href=\"http://www.heise.de\" target='_blank' >mehr ...</a><br><br>\n\n";
?>
Der funktioniert so.
Anhand dessen kannst Du dir weitere Modifikationen überlegen.
MfG
jubilee
Hi Jubilee,
ich danke Dir werde es gleich morgen probieren.
ich da nuß ich mal ne Spende rüberwachsen lasse ;o)
Ciao Henne