AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein [PHP] alle Links automatisch vor der Ausgabe ändern
Thema durchsuchen
Ansicht
Themen-Optionen

[PHP] alle Links automatisch vor der Ausgabe ändern

Ein Thema von Delphi-Freak · begonnen am 26. Nov 2004 · letzter Beitrag vom 27. Nov 2004
Antwort Antwort
Benutzerbild von Delphi-Freak
Delphi-Freak

Registriert seit: 26. Sep 2004
Ort: Wien Nähe (Österreich)
321 Beiträge
 
Delphi 2006 Architect
 
#1

[PHP] alle Links automatisch vor der Ausgabe ändern

  Alt 26. Nov 2004, 16:33
Halli Hallo!

Mal eine Frage zu PHP:
Gibt es irgendeine Möglichkeit, über PHP alle Links so abzuändern, dass hinten noch automatisch bei der Ausgabe zusätzliche Variablen hinzugefügt werden (so wie es bei Sessions automatisch gemacht wird, da wird "?PHPSESSID=..." bzw. "&PHPSESSID=..." hinzugefügt oder bei Formularen wird es über "<input type='hidden' name='PHPSESSID' value='...'>" gelöst)
Gibt es da irgendeine Funktion oder so, oder hat jemand eine Idee, wie man das über echo Ausgegebene abändern kann?

thankyouverymuch!!!


LG
Gerhard Pfister
*
»To him who loves us and has freed us from our sins by his blood [...] be glory and power for ever and ever! Amen.« (Revelation*1,*5?6)
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#2

Re: [PHP] alle Links automatisch vor der Ausgabe ändern

  Alt 26. Nov 2004, 18:28
Hi Delphi-Freak,

als erstes muss ich erwähnen: der folgende Code funktioniert nur ab PHP 4.0.x.

Als erstes musst du diese Funktion in allen Dateien definieren:
Code:
//
// Append $SID to $url. Borrowed from phplib and modified
// Taken from phpBB 2.0.10, (c) by phpBB Group ([url]www.phpbb.com[/url])
//
function append_sid($url, $SID_name, $SID)
{
  if ( !empty($SID) && !preg_match('#'.$SID_name.'#', $url) 9
  {
    $url .= ( ( strpos($url, '?') != false ) ? '&amp;' '?' ) . $SID_name . '=' . $SID;
  }
  return $url;
}
Sie hängt an eine übergebene URL eine Session-ID an. $url ist die URL, $SID_name der Name der Sessionvariable und $SID der Inhalt.

Als nächstes muss der Code ganz oben vor die erste Ausgabe hin:
Code:
ob_start();
Dieser sorgt dafür, dass die Ausgabe gecached wird, und nicht sofort ausgegeben wird.

Und am Ende kommt dieser Code hin:
Code:
$contents = ob_get_contents();
ob_end_clean();

//
// Parts of this code property of Daniel R. Wolf of [url]www.delphipraxis.net[/url]
//
$segments = preg_split( '#(<a.+?</a>)#s', $contents, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);
$contents = '';

foreach( $segments as $seg )
{
  if (strpos($seg, '<a') !== false)
  {
    $subsegments = preg_split( '#(href=".+?")#s', $seg, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);
    $seg = '';
    foreach ( $subsegments as $subseg )
    {
      if (strpos($subseg, 'href') !== false)
      {
        $seg .= substr($subseg, 0, 6);
        $seg .= append_sid(substr($subseg, 6, -1));
        $seg .= '"';
      }
      else
      {
        $subseg .= $subseg;
      }
    }
    unset($subsegments);
  }
  contents .= $seg;
}
unset($segments);
echo $contents;
Was macht der nun? Zuerst holt er sich alles, was ausgegeben wurde und leert den Ausgabecache.
Als nächstes wird nach URL-tags gespaltet, und falls eines gefunden wurde, wird das href="..." herausgefiltert. Das wird anschließend so bearbeitet, dass die Session-ID angehängt wird. Anschließend wird alles nochmal mit echo ausgegeben (diesmal ohne Buffering, also endgültig). Sieh dir einfach die Befehlsreferenz zu den einzelnen Befehlen an, das sollte helfen.

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
moritz

Registriert seit: 18. Apr 2003
1.037 Beiträge
 
#3

Re: [PHP] alle Links automatisch vor der Ausgabe ändern

  Alt 26. Nov 2004, 18:31
Ich denke mit Regulären Ausdrücken und preg_replace wäre dir auch gedient.
"Optimistisch ist diejenige Weltanschauung, die das Sein höher als das Nichts stellt und so die Welt und das Leben als etwas an sich Wertvolles bejaht."
Albert Schweitzer
  Mit Zitat antworten Zitat
Benutzerbild von Delphi-Freak
Delphi-Freak

Registriert seit: 26. Sep 2004
Ort: Wien Nähe (Österreich)
321 Beiträge
 
Delphi 2006 Architect
 
#4

Re: [PHP] alle Links automatisch vor der Ausgabe ändern

  Alt 26. Nov 2004, 20:38
Viiiiiiieeeeeeeeelen DANK!!!!

@moritz: reguläre Ausdrücke alleine helfen nicht, da durch echo ein text sofort ausgegeben wird (außer über alcaeus' methode), trotzdem auch danke!

Noch einen schönen Abend!
Gerhard Pfister
*
»To him who loves us and has freed us from our sins by his blood [...] be glory and power for ever and ever! Amen.« (Revelation*1,*5?6)
  Mit Zitat antworten Zitat
Benutzerbild von Delphi-Freak
Delphi-Freak

Registriert seit: 26. Sep 2004
Ort: Wien Nähe (Österreich)
321 Beiträge
 
Delphi 2006 Architect
 
#5

Re: [PHP] alle Links automatisch vor der Ausgabe ändern

  Alt 27. Nov 2004, 13:12
Noch eine letzte Meldung für andere Suchende:
Habe noch eine weitere Funktion gefunden: output_add_rewrite_var ( string name, string value)
Die muss man nur am Anfang vom Script hingeben, dann wird das für alle Links, Formulare usw. automatisch gemacht (bei Links z.B. ...). Natürlich kann man diese Funktion auch mehrmals aufrufen, dann werden halt mehrere Variablen hinzugefügt.
Funktioniert echt super!

LG
Gerhard Pfister
*
»To him who loves us and has freed us from our sins by his blood [...] be glory and power for ever and ever! Amen.« (Revelation*1,*5?6)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:22 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz