Einzelnen Beitrag anzeigen

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 ) ? '&' '?' ) . $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