Prüfen, ob bei links auch target="blank" steht

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

  • Prüfen, ob bei links auch target="blank" steht

    Hallo!

    Ich möchte in einer Html Datei alle links aufspüren und mir diese dann anzeigen lassen.
    Zusätzlich muss ich überprüfen, ob sich diese (alle) Links auch in einem neuen Fenster offnen. Es muss also die Angabe target="_blank" vorhanden sein.
    Hier erstmal das, was ich selbst schon hinbekommen habe:
    PHP-Code:
    //Einlesen der Datei
    $lines file ("../ordner/datei.php");

    // Nun nach den Links suchen
    $pattern '%\<a.*href=("|\')([^\\1]*)\\1.*>(.*)\</a\>%siU';
    $string implode($lines);
    preg_match_all($pattern$string$trefferPREG_SET_ORDER);

    // Alles ausgeben
    print_r($treffer); 
    Dann wird mir sowas ausgegeben:
    [0] => Array
    (
    [0] => <a href="abc">def</a>
    [1] => "
    [2] => abc
    [3] => def
    )
    Also unter anderem alles was zwischen den a Tags steht.
    Jetzt muss ich nur noch rausfinden, ob das 'target="_blank" ' auch wirklich <a hier irgendwo ></a> steht.
    Wenn es nicht vorhanden ist, muss es hinzugefügt werden, bzw. ein anderes target überschrieben werden.
    Es muss absolut sicher gestellt werden, dass sich alle Links von dieser Seite nach dieser Prozedur im eigenen Fenster öffnen.
    Wie bekomme ich das zuverlässig hin?

    Mfg,
    Stefan

  • #2
    [0] => <a href="abc">def</a>

    kannst ja in deinem ergebnis nochmal ein preg_match() anwenden..?!

    Kommentar


    • #3
      Warum nicht gleich $pattern so ändern, dass target=... in $treffer separat aufgeführt wird. Klammern um den Ausdruck, der target=... matchen soll und fertig.

      Kommentar


      • #4
        Erstmal danke für die antworten!

        Eine echt gute ide, das direkt in den Pattern einzubauen.
        Jetzt versuche ich schon die ganze Zeit das irgendwie hinzukriegen.
        Troz aller Tutorials komme ich einfach nicht zum richtigen ergebnis.
        Eins von den folgenden erfordernissen fehlt immer.
        1. Es muss matchen wenn sich 'Target=_blank" ' genau
        <a xxxx href="xxxx" HIER xxxx ></a> befindet
        oder <a xxxx href="xxxx" xxxx HIER ></a>
        oder <a xxxx href="xxxx" xxxx HIER xxxx ></a>
        oder <a xxxx HIER xxxx href="xxxx" xxxx ></a>
        oder ....
        An allen möglichen stellen ebend, aber schon im einleitenden a Tag also:
        2. Es darf nicht matchen, wenn es <a xxxx >HIER</a> steht. Auf diese Art darf man das Script ebend nicht überlisten können. (wenn dort ein img ist, kann man es nämlich einbauen, ohne funktion)
        3. Es darf dabei keine gross- und Kleinschreibung beachten. Also target = Target = TARGET ....
        4. Ein leerzeichen target[HIER]=[HIER]"[HIER]_blank[HIER]" darf nichts ausmachen.
        5. Das alles gilt natürlich auch für das href
        6. gibt es beim a Tag auch sowas zu beachten? (<a = < a oder </a> = < / a > ...)
        Wichtig ist halt, dass ALLE Links matchen, die auch der Browser als solchen versteht.

        Es muss definitiv JEDER Link erkannt werden, und dann noch überprüft werden, ob auch das richtige target verwendet wurde. Hintergrund ist, dass nur bestimmte Links erlaubt sind, also links zu bestimmten Seiten. Und wenn die Seite stimmt, dann muss noch das richtige target vorhanden sein. Von daher wären 2 schleifen irgendwie doch besser, oder?
        Also ich bin für jeden Tip dankbar, der mich auf den richtigen weg bringt, ich stehe gerade vor allem bei den Patterns voll auf dem Schlauch.

        Mfg, Stefan

        Kommentar


        • #5
          PHP-Code:
          $reg '/<a href="([^"]*)".*target="_blank".*>/Uis'
          Sollte Dir nur die hrefs matchen, welche über target="_blank" verfügen.

          Gruss

          tobi
          Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

          [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
          Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

          Kommentar


          • #6
            1.+2. "<a.+($target.+$href|$href.+$target).*>
            3. Modifier!
            4.+5. "Leerzeichen?" in Regex einbauen
            6. Mußt erstmal herausfinden, welche Mißbildungen eines a-Tags überhaupt von mind. 1 Browser akzeptiert werden.

            Kommentar


            • #7
              noch andere idee...

              und dazu auch noch aktuellem standard entsprechend, weil target depreciated..

              match erstmal alles was target heißt, und schmeiß es raus.. (oder lass es drin, es ist gleich sowieso nicht mehr von bedeutung).

              dann ersetzt du deine <a einfach durch
              <a onclick="window.open(this.href); return false"

              und fertig ist die laube..

              standardkonform barrierefrei und definitiv korrekter code.. nicht so ein target gemurks aus vergangenen tagen..

              greetz, high
              Good programming is 40% experience, 20% skill, 20% RTFM, 15% caffeine, and 5% attention to detail.
              When everything else fails, manipulate the data...
              Beschriftungen / Großformatdruck / Werbemittel

              Kommentar


              • #8
                und dazu auch noch aktuellem standard entsprechend, weil target depreciated..
                ja, bei den strict-varianten. ansonsten nicht.
                standardkonform barrierefrei und definitiv korrekter code
                PHP-Code:
                <a onclick="window.open(this.href); return false" 
                javascript ist nicht barrierefrei.

                gruß
                peter
                Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
                Meine Seite

                Kommentar


                • #9
                  In diesem Fall schon, weil das JavaScript nur einen Nebeneffekt erfüllt..

                  denn der Link funktioniert dennoch..

                  und das ist der Sinn wenn du dich auch mal in den Quellen im W3C umschaust.. derjenige, der JS aus hat (oder es nicht unterstützt) braucht sich auch nicht vorschreiben lassen, ob es ein neues Fenster geben soll..

                  insofern barrierefrei im Sinne der definition..

                  STRICT Varianten sind empfohlen.. und man kann alles damit tun, was man will... Transitiv ist ja sowieso nur ein Zugeständnis an die Kompatibilität zu alten Seiten.. XHTML1.1 Transitiv zum beispiel gibt es schon nicht mehr..

                  greetz, high
                  Good programming is 40% experience, 20% skill, 20% RTFM, 15% caffeine, and 5% attention to detail.
                  When everything else fails, manipulate the data...
                  Beschriftungen / Großformatdruck / Werbemittel

                  Kommentar


                  • #10
                    Es ging ja wohl darum, sicherzustellen, dass sich die Links garantiert in einem neuen Fenster öffnen.
                    Das geht nicht nur mit JS, sondern das geht ausschließlich mit dem target-Attribut.

                    Schlimm ist das nicht, denn wenn es wirklich nötig ist (bevor jemand meckert: "Aus Gründen der Barrierefreiheit müssen wir Sie bitten, beim Benutzen des nun folgenden Verweise die [Shift]-Taste gedrückt zu halten" hat nicht wirklich viel mit Benutzerfreundlichkeit zu tun), kann einfach ein Doctype verwendet werden, der dieses Attribut erlaubt.

                    Wenn deine Definition vor Barrierefreiheit bedeutet, dass du Benutzern mit JS vorschreibst, ob Links in einem neuen Fenster aufgehen oder nicht, Benutzern ohne JS dies aber nicht vorschreibst, dann verstehe ich das nicht.

                    P.S. Transitiv ist nicht das gleiche wie transitional
                    Zuletzt geändert von mrhappiness; 31.10.2006, 12:50.
                    Ich denke, also bin ich. - Einige sind trotzdem...

                    Kommentar


                    • #11
                      Das stimme ich dir zu..
                      allerdings gibt es ein "garantiert im neuen Fenster" im Web nunmal nicht..

                      wenn ich das nicht will, dann tut mein Browser das nicht, egal ob ein target angegeben ist, oder nicht. however..
                      das ist ja nicht das Thema..

                      greetz, high
                      Good programming is 40% experience, 20% skill, 20% RTFM, 15% caffeine, and 5% attention to detail.
                      When everything else fails, manipulate the data...
                      Beschriftungen / Großformatdruck / Werbemittel

                      Kommentar


                      • #12
                        Original geschrieben von mrhappiness
                        Schlimm ist das nicht, denn wenn es wirklich nötig ist (bevor jemand meckert: "Aus Gründen der Barrierefreiheit müssen wir Sie bitten, beim Benutzen des nun folgenden Verweise die [Shift]-Taste gedrückt zu halten" hat nicht wirklich viel mit Benutzerfreundlichkeit zu tun), kann einfach ein Doctype verwendet werden, der dieses Attribut erlaubt.
                        Das target-Attribut ist doch nur ein komplettes Unding für die sowieso verkorkste Frameset-Spielerei.
                        Es sollte möglich sein eine komplette Surf-Sitzung mit EINEM Browserfenster zu machen. Wenn ich die Seite des nächsten Links in einem neuen Fenster haben will, drücke ich Shift oder die mittlere Maustaste.
                        Das ganze kann man, bzw. könnte man, auf Wunsch durch JS im Verhalten ändern, sollte dann aber als default aus und nur vom User aktivierbar sein.

                        meine Meinung zu dem Thema

                        Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                        bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                        Wie man Fragen richtig stellt

                        Kommentar


                        • #13
                          Es sollte möglich sein eine komplette Surf-Sitzung mit EINEM Browserfenster zu machen.
                          das hängt alles vom user ab. wer das nicht kennt, naja. kann mich noch gut an eine geschichte erinnern, die mir jemand mal während eines multimediatreffs in köln erzählte.

                          kunde wollte, dass pdfs in einem neuen fenster geöffnet werden. da randalierte die eine hälfte des vorstandes, weil man nicht mehr über den zurück-button zur seite kam. die hatten nicht begriffen, dass ein neues fenster geöffnet wurde.

                          also wurde alles umgestellt und target="_blank" entfernt. da randalierte dann die andere hälfte des vorstandes, weil die mit dieser lösung nicht klarkamen.

                          das ende vom lied. ein pdf mit zwei links inkl. hinweis in neuem fenster öffnen, bzw. im selben fenster öffnen. da waren dann alle glücklich.

                          gruß
                          peter
                          Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
                          Meine Seite

                          Kommentar


                          • #14
                            Die entsprechenden Patterns habe ich dank den Tips nun hinbekommen. Vielen Dank nochmal!

                            Was ich der Diskusion über das target entnehmen kann, ist das dies die absolut sicherste Variante ist. (Oder habe ich das Falsch verstanden?). Denn die soll es sein, also liege ich mit dem Target richtig.

                            Es sollen ja absolut sicher ALLE Links, also alles was anklickbar ist, erfasst werden. Die naheliegenste variante ist das <a xxx >xxx</a> für einen Link. Nun habe ich aber noch einen weiteren Tag gefunden:
                            PHP-Code:
                            <map name="Map" id="Map">
                                <
                            area shape="rect" coords="4,10,91,28" href="index.html" alt="Übersicht" target="_blank" />
                            </
                            map
                            Auch diese muss ich natürlich auffinden und überprüfen. Hier beschränkt sich ja die suche auf das <area xxx />.
                            Jetzt meine Frage: Gibt es noch irgendwelche andere Möglichkeiten Links in einer html Datei unterzubringen?
                            Wie sieht es mit JS aus? Nach welchen strings muss ich da suchen?

                            Mfg, Stefan

                            Kommentar


                            • #15
                              wenn du die ganze JS Palette mit abdecken willst, dann gibt es nahezu unzählige Möglichkeiten, einen link irgendwie zu platzieren..

                              viele elemente dürfen ein onclick-Attribut besitzen, das man für links verwenden kann...
                              außerdem lässt sich auch über formulare verlinken mit dem submit-button, oder aber jedem beliebigen eingabe-oder auswahlfeld über andere event-handler (so zB onchange, onfocus onblur)
                              auch lässt sich mit JS dir URL des aktuellen dokuments ändern document.location.href='neueseite.htm' um nur einige wenige zu nennen... woher stammen denn die Originale?

                              Vielleicht kann man etwas einschränken, was gebräuchlich ist, und was nicht..

                              Was ist der Zweck dieser Anwendung ?

                              greetz, high

                              Anmerkung: die sicherste variante wäre eine kombination aus target und onclick, wenn du denn das unbedingt so machen möchtest...
                              also im ergebnis: <a href="wasauchimmer.htm" target="_blank" onclick="window.open(this.href); return false">text</a>
                              Good programming is 40% experience, 20% skill, 20% RTFM, 15% caffeine, and 5% attention to detail.
                              When everything else fails, manipulate the data...
                              Beschriftungen / Großformatdruck / Werbemittel

                              Kommentar

                              Lädt...
                              X