foreach - Schleifen und arrays

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • newbie1955
    replied
    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>"; 

    Leave a comment:


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

    Leave a comment:


  • newbie1955
    replied
    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.

    Leave a comment:


  • Melewo
    replied
    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.

    Leave a comment:


  • newbie1955
    replied
    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?

    Leave a comment:


  • Melewo
    replied
    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?"
    Last edited by Melewo; 09-06-2013, 11:59.

    Leave a comment:


  • newbie1955
    replied
    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

    Leave a comment:


  • Melewo
    replied
    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.

    Leave a comment:


  • newbie1955
    replied
    Nur die Überschrift vm focus

    zeigt er mir an. Habe feedreader 1.01 genommen. Spiegel oder ähnliche feeds klappen.
    Last edited by newbie1955; 09-06-2013, 11:06.

    Leave a comment:


  • Melewo
    replied
    Originally posted by newbie1955 View Post
    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

    Leave a comment:


  • newbie1955
    replied
    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

    Leave a comment:


  • Melewo
    replied
    Originally posted by newbie1955 View Post
    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.

    Leave a comment:


  • Melewo
    replied
    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.

    Leave a comment:


  • h3ll
    replied
    Originally posted by Melewo View Post
    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.
    Last edited by h3ll; 08-06-2013, 21:58.

    Leave a comment:


  • Melewo
    replied
    Originally posted by h3ll View Post
    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.

    Leave a comment:

Working...
X