foreach - Schleifen und arrays

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • newbie1955
    antwortet
    Anführungszeichen

    nächster Versuch, klappt auch nicht:

    PHP-Code:
     foreach ($pxml->entry as $nachricht) {

                if (
    $nachricht->title){ $attr $nachricht->link->attributes();
                    echo 
    "<li><a href=\"".htmlspecialchars($attr["href"])."\" target=\"_blank\" title = \""htmlspecialchars($nachricht->summary)"\".">".htmlspecialchars($nachricht->title)."</li></a>"; 

    Einen Kommentar schreiben:


  • h3ll
    antwortet
    Es fehlen die Anführungszeichen bei title. Siehst du ja, wenn du dir die HTML-Ausgabe anschaust.

    Einen Kommentar schreiben:


  • newbie1955
    antwortet
    Also

    ich bin da total behämmert in der Angelegenheit. Also nochmal: Vorlage:

    PHP-Code:
          foreach ($pxml->entry as $nachricht) {

                if (
    $nachricht->title){ $attr $nachricht->link->attributes();
                    echo 
    "<li><a href=\"".htmlspecialchars($attr["href"])."\" target=\"_blank\">".htmlspecialchars($nachricht->title)."</li></a>";
                } 
    Lösungsversuch:

    PHP-Code:
         foreach ($pxml->entry as $nachricht) {

                if (
    $nachricht->title){ $attr $nachricht->link->attributes();
                    echo 
    "<li><a href=\"".htmlspecialchars($attr["href"])."\" target=\"_blank\" title = "htmlspecialchars($nachricht->summary).">".htmlspecialchars($nachricht->title)."</li></a>"
    Ergebnis: wieder kommt nur ein Wort des Summarys als tooltip. Immerhin überhaupt was.

    Einen Kommentar schreiben:


  • Melewo
    antwortet
    Gebe es doch einfach mit echo aus, schaue in den Quelltext und Du siehst, was du vergessen hast. Ohne Testausgabe, lösche aus

    PHP-Code:
    "...   title = \"".htmlspecialchars($nachricht->description).">  ..." 
    den Code mit Verknüpfung

    PHP-Code:
    ".htmlspecialchars($nachricht->description)." 
    und Du siehst was übrig bleibt:

    PHP-Code:
    "...  title = \"   >    ..." 
    Fehlt da irgendetwas?

    Das mit den fehlenden Zeilenumbrüchen habe ich jetzt erst einmal noch etwas sauberer gelöst, nur der Feed enthält insgesamt 221 img-Tags und ich weiß immer noch nicht, wie ich die Dinger auf 10 reduziere. Reduzieren wäre ja nicht das Problem, doch bei anderen Feeds können die mal in description, mal in content und mal in summary vorkommen.

    Einen Kommentar schreiben:


  • newbie1955
    antwortet
    Zu blöd

    Habe es so versucht, kriege es aber nicht auf die Reihe

    PHP-Code:
    echo "<li><a href=\".htmlspecialchars($href).\" target=\"_blank\" title = \" .htmlspecialchars($desc)"htmlspecialchars($title)."</li></a>"
    oder in Deinem feedreader von neulich:
    PHP-Code:
       foreach ($pxml->channel->item as $nachricht) {

                if (
    $nachricht->title) {
                   echo 
    "<li><a href=\"".htmlspecialchars($nachricht->link)."\" target=\"_blank\" title = \"".htmlspecialchars($nachricht->description).">".htmlspecialchars($nachricht->title)."</li></a>"
    Könntest Du mir einen Tipp geben, wo es hakt?

    Einen Kommentar schreiben:


  • Melewo
    antwortet
    Beim Focus 42.34s (onload: 42.37s) und davon entfallen 41,43 auf Wartezeit. Werde mal sehen, was sich da machen lässt. Im Vergleich den Feed von der Tagesschau mit 1.05s (onload: 1.06s) wobei der auch schon einmal schneller war.

    Aber das ist doch ganz einfach. Du brauchst doch nur alle einfachen Anführungszeichen gegen doppelte Gänsefüßchen auszutauschen und alle doppelten Gänsefüßchen im String mit einem Backslash \ zu maskieren. Wo liegt Dein Problem?

    PHP-Code:
     "Ich bin ein String und enthalte einige \"Gänsefüßchen\" und was ist dabei?"
    Und wenn Du nun etwas mit Verknüpfung". ."einfügen möchtest, was mit "Gänsefüßchen" angezeigt werden soll,
    dann fügst Du das halt da ein, wie bei:

    PHP-Code:
    "Ich bin ein String und enthalte einige \"".   Hier ist doch Platz für Code im String   ."\" und was ist dabei?"
    Und wenn Du etwas ohne "Gänsefüßchen" anzuzeigen einfügen möchtes, dann halt normal:

    PHP-Code:
    "Ich bin ein String und enthalte einige ".   Hier ist doch Platz für Code im String   ." und was ist dabei?"
    Zuletzt geändert von Melewo; 09.06.2013, 11:59.

    Einen Kommentar schreiben:


  • newbie1955
    antwortet
    Naja,

    lange rödeln tut er nicht. Aber zur Not könnte ich den Focus auch separat behandeln. Ich müsste ohnehin den feedreader abspecken, weil ich ja nur die Links, title und descriptions bräuchte. Die (descr.) ich ja, wie gesagt, gerne in tooltips packen würde. Doch irgendwie scheitere ich an der Syntax. Wenn ich meinen beschränkten magpie parser so modifiziere
    PHP-Code:
    echo "<li><a href = '$href' target='_blank' title = '$desc' >$title</a></li>"
    dann kommt die Description als tooltip, allerdings nur wenn in der description nix anderes drinsteht, wie images oder links, und nur, wenn das Ganze nicht summary heißt. Außerdem ist das dann ohne htmlspecialchars. Aber wenn ich stattdessen
    PHP-Code:
     echo "<li><a href=\"".htmlspecialchars($href)."\" target=\"_blank\" title = \" .htmlspecialchars($desc)">".htmlspecialchars($title)."</li></a>"; 
    versuche, verhaue ich mich immer in der Syntax und komme mit dem ganzen Gemurkse aus "" und \ durcheinander. Könntest Du mir vielleicht EINMAL sowas auseinanderdröseln und mir einen Tip geben wie man die description (möglichst noch beschränkt auf zwei Sätze) als tooltip einbaut in die Ausgabe?

    Gruß und Dank
    newbie1955

    Einen Kommentar schreiben:


  • Melewo
    antwortet
    Du könntest es höchstens statt mit ">\n<" noch einmal mit ">\r\n<" versuchen, sonst wüsste ich nicht, was noch sein könnte, bei mir ladet der Feed ja nun.

    Die Laufzeit des Scripts ist beim Focus reichlich hoch, weil der Feed viele kleine Images enthält und das Script ja jedes Image einzeln überprüft. Das könnte im ungünstigsten Fall zu einem Abbruch führen, wenn das Script länger als 30 Sekunden rödelt. Doch dann sollte wohl gar nichts mehr ausgegeben werden. Überlege so, wie man am besten zählen könnte, dass nicht mehr als ein Image pro Item überprüft und geladen wird.

    Vielmehr fällt mir gerade nicht ein.

    Einen Kommentar schreiben:


  • newbie1955
    antwortet
    Nur die Überschrift vm focus

    zeigt er mir an. Habe feedreader 1.01 genommen. Spiegel oder ähnliche feeds klappen.
    Zuletzt geändert von newbie1955; 09.06.2013, 11:06.

    Einen Kommentar schreiben:


  • Melewo
    antwortet
    Zitat von newbie1955 Beitrag anzeigen
    wenn ich das einfüge, kommt trotzdem bei Focus nicht, habe ich was übersehen?
    Bei mir ladet der Feed dann, könnte höchstens noch mit der Version zusammen hängen, da benutzt Du ja noch die ältere: XML-Feedreader

    Einen Kommentar schreiben:


  • newbie1955
    antwortet
    Hallo

    @Melewo, wenn ich das einfüge, kommt trotzdem bei Focus nicht, habe ich was übersehen? Hier der Code mit Deinem Einschub, aber ausgegeben wird nix.
    PHP-Code:
    <?php
    /*------------------------------------------------------------------------------------------------------------------
     Beschreibung: Feedreader für RSS- und Atom-Feeds (http://www.coder-welten.de/projekte/feedreader.htm)
     Autor:        Horst Müller
     Version:      Beta 0.2
     Lizenz:       MIT-Lizenz (http://de.wikipedia.org/wiki/MIT-Lizenz) - Der Autor muss in einem Urheberrechtsvermerk
                   erwähnt werden.
     -------------------------------------------------------------------------------------------------------------------
    */
    ini_set("user_agent""Mozilla/5.0 (compatible; Feedreader/PHP +".$_SERVER["HTTP_HOST"].$_SERVER["PHP_SELF"].")");
    header("Content-Type: text/html; charset=UTF-8");

    error_reporting(E_ALL);                  // Der Wert kann nach Erprobung auf 0 gesetzt werden.

    $seite "http://rss2.focus.de/c/32191/f/443313/index.rss";                 // Die Web-Adresse des zu ladenden Feeds eintragen
    $link  "";                             // Dient nur der Bekanntmachung der Variablen $link
    define("SCHLIESSE"">");                // Für valides HTML je nach Dokumenttyp-Deklaration bei HTML ">" oder bei XHTML " />"
    ?>
    <!DOCTYPE html>
    <html>

    <head>
    <title>Feedreader</title>
        <link href="navi1.css" type="text/css" rel="stylesheet" media="screen" /> 
    </head>

    <body>
        <div class="border">
    <?php

    function wandleTags($daten) {

        
    $daten str_replace("content:encoded""content"$daten);
        
    $daten str_replace("dc:creator""creator"$daten);
        
    $daten preg_replace_callback("/(&[#a-z0-9]+;)/",

            function(
    $enti) {

                return 
    mb_convert_encoding($enti[1], "UTF-8""HTML-ENTITIES");
            }, 
    $daten);
        return 
    $daten;
    }
    function 
    filtereHTML($daten) {

        
    $daten preg_replace("/<p.*?>(.+?)<\/p>/is""$1[br]\n"$daten);
        
    $daten preg_replace("/<div.*?>(.+?)<\/div>/is""$1[br]\n"$daten);
        
    $daten preg_replace("/<span.*?>(.*?)<\/span>/is""$1"$daten);
        
    $daten preg_replace("/<br.*?>/i""[br]\n"$daten);
        
    $daten preg_replace("/<a href.+?>(.*?)<\/a>/is""$1"$daten);
        
    $daten preg_replace("/<img.*?src=\"(.+?)\.(jpg|png).*?>/is""[img]$1.$2[/img]"$daten);

        
    $daten str_replace("<b>""[b]"$daten);
        
    $daten str_replace("</b>""[/b]"$daten);
        return 
    $daten;
    }
    function 
    formeHTML($daten) {

        
    $daten str_replace("[br]""<br".SCHLIESSE$daten);
        
    $daten str_replace("[b]""<b>"$daten);
        
    $daten str_replace("[/b]""</b>"$daten);
        
    $daten preg_replace_callback("/\[img\](.+?)\[\/img\]/",

        function (
    $bilder) {

            @
    $format getimagesize($bilder[1]);

            if(
    $format != false) {

                if (
    $format["mime"] == "image/jpeg" or $format["mime"] == "image/png") {

                    
    $height $format[1];
                    
    $width  $format[0];

                    if (
    $height 250){$height 250;
                        
    $prozent = ($format[1] / $height);
                        
    $width   = ($format[0] / $prozent);
                    }
                    if (
    $width 250){$width 250;
                        
    $prozent = ($format[0] / $width);
                        
    $height  = ($format[1] / $prozent);
                    }
                    return 
    "<img src=\"".$bilder[1]."\" alt=\"Ein Bild\" height=\"".round($height)."\" width=\"".round($width)."\"><br".SCHLIESSE;
                }
            }
        }, 
    $daten);
        return 
    $daten;
    }
    function 
    formeDatumZeit($daten) {

        
    $daten preg_replace("/(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2})/""$3.$2.$1 um $4:$5 Uhr"$daten);
        
    $daten substr($daten023);
        return 
    $daten;
    }

    if ((
    $data file_get_contents($seite)) != false) {
        
    $data preg_replace("/></"">\n<"$data); 
        
    $pxml simplexml_load_string(wandleTags($data), "SimpleXMLElement"LIBXML_NOCDATA);

        
    $si =  0;
        
    $cw 18;

        if (
    $pxml->channel->item$leseaus $pxml->channel->item;    // RSS
        
    if ($pxml->entry)         $leseaus $pxml->entry;            // Atom

        
    if ($leseaus != false) {

            foreach (
    $leseaus as $nachricht) {

                if ((string)
    $nachricht->link != "") {
                    
    $link $nachricht->link;
                } elseif (
    $nachricht->link->attributes() != "") {
                    
    $attr $nachricht->link->attributes();
                    
    $link $attr["href"];
                }
                if (
    $nachricht->title) {
                    echo 
    "<h3><a href=\"".htmlspecialchars($linkENT_QUOTES)."\" target=\"_blank\">".htmlspecialchars($nachricht->titleENT_QUOTES)."</a></h3>\n";
                }
                if (
    $nachricht->description) {
                    echo 
    htmlspecialchars(filtereHTML($nachricht->description), ENT_QUOTES)."<br".SCHLIESSE."\n";
                }
                if (
    $nachricht->content) {
                    echo 
    "<br".SCHLIESSE."\n".formeHTML(htmlspecialchars(filtereHTML($nachricht->content), ENT_QUOTES))."<br".SCHLIESSE."\n";
                } elseif (
    $nachricht->summary) {
                    echo 
    formeHTML(htmlspecialchars(filtereHTML($nachricht->summary), ENT_QUOTES))."<br".SCHLIESSE."\n";
                }
                if (
    $link != "") {
                    echo 
    "<a href=\"".htmlspecialchars($linkENT_QUOTES)."\" target=\"_blank\">Weiterlesen</a><br".SCHLIESSE."\n";
                }
                if (
    $nachricht->pubDate) {
                    echo 
    "<br".SCHLIESSE."".htmlspecialchars(substr($nachricht->pubDate,  016), ENT_QUOTES).
                         
    " um ".htmlspecialchars(substr($nachricht->pubDate17,  5), ENT_QUOTES)." Uhr";
                } elseif (
    $nachricht->updated) {
                    echo 
    "<br".SCHLIESSE.formeDatumZeit($nachricht->updated)."\n";
                } elseif (
    $nachricht->published) {
                    echo 
    "<br".SCHLIESSE.formeDatumZeit($nachricht->published)."\n";
                }
                if (
    $nachricht->author) {
                    echo 
    " von ".htmlspecialchars($nachricht->authorENT_QUOTES)."<br".SCHLIESSE."\n<br".SCHLIESSE."\n";
                } elseif (
    $nachricht->creator) {
                    echo 
    " von ".htmlspecialchars($nachricht->creatorENT_QUOTES)."<br".SCHLIESSE."\n<br".SCHLIESSE."\n";
                }
                echo 
    "<hr".SCHLIESSE;
                
    $si++;
                if (
    $si == $cw) {break;
                }
            }
        }
    } else { echo 
    "Feed konnte nicht geladen werden!\n";
    }
    ?>
      </div> 
    </body>
    </html>
    Gruß
    newbie1955

    Einen Kommentar schreiben:


  • Melewo
    antwortet
    Zitat von newbie1955 Beitrag anzeigen
    Der focus-feed
    FOCUS Online - Politik-News

    z. B. ist nicht valide, das habe ich gemerkt und werde auch noch ein wenig forschen, wie man das ausgleichen kann.
    So, den Fehler habe ich gefunden, hat aber gedauert, hatte auch schon die Nase voll und wollte die Angelegenheit bei Seite schieben, dabei ganz simpel. Es liegt einfach nur an den fehlenden Zeilenumbrüchen bei diesem Feed. Damit sollte es gehen, wenn Du die zweite Zeile gleich hinter der Zeile mit file_get_contents einfügst.

    PHP-Code:
    if (($data file_get_contents($seite)) != false) {

        
    $data preg_replace("/></"">\n<"$data); 
    Nur ich überlege jetzt, ob ich da etwas mache und falls ja, wie am besten. Nur auf Verdacht einfügen, weil mal so ein Feed dabei sein könnte, gefällt mir eigentlich nicht.

    Einen Kommentar schreiben:


  • Melewo
    antwortet
    Ja, aber nur von mir kann ich nicht ausgehen, ich benutze die Scripts ja nicht, ich teste die ja nur. Wie jetzt so ein Script für Feeds, für den eigenen Bedarf habe und benötige ich nur ein kleines, welches nur für eigene Feeds ausgelegt ist, mit denen es eh keine Probleme gibt. Doch so zum Download, der Aufwand hält sich in Grenzen, wenn ich da noch eine Variante anbiete. Da kommt dann ein Hinweis mit zu, für welche PHP Version geeignet und wenn der größte Teil umgestellt ist, ein deutlicher Hinweis: Bitte nicht mehr verwenden, nur noch für Anschauungszwecke.

    Einen Kommentar schreiben:


  • h3ll
    antwortet
    Zitat von Melewo Beitrag anzeigen
    Beim Webspace habe ich aber einige bei, die noch bei PHP Version 5.2 sind, so bei Strato, all-inkl und noch bei einem anderen Hoster. Könnte mir vorstellen, dass es nicht nur mir so geht.
    Strato setzt auf PHP 5.3 (Zitat zu PHP 5.2: "Alle Bestandskunden die diese Version nutzen werden sukzessive auf PHP 5.3.x umgestellt"). Also Neukunden bekommen 5.3. Nur einige Bestandskunden gammeln noch mit der veralteten Version herum (vermutlich aus Faulheit oder Desinteresse).

    All-inkl unterstützt sogar PHP 5.4.

    Also die Hoster als Ausrede zu verwenden ist ganz billig. Wenn man wirklich einen Hoster haben sollte, der keine zeitgemäße PHP-Version anbietet, dann ist das höchstens ein Grund zum Wechseln.
    Zuletzt geändert von h3ll; 08.06.2013, 21:58.

    Einen Kommentar schreiben:


  • Melewo
    antwortet
    Zitat von h3ll Beitrag anzeigen
    Alles älter als PHP 5.3 sollte nicht mehr verwendet werden, da dafür keine Sicherheitsupdates mehr erscheinen und du somit ein unsicheres System hast.
    Beim Webspace habe ich aber einige bei, die noch bei PHP Version 5.2 sind, so bei Strato, all-inkl und noch bei einem anderen Hoster. Könnte mir vorstellen, dass es nicht nur mir so geht.

    Einen Kommentar schreiben:

Lädt...