Deschizându-mi RSS reader-ul ajung pe slashdot.org unde găsesc link-uri spre mai multe pagini cu idei de păcăleli. Distrându-mă de ce vedeam pe acolo, am ajuns la pagina asta şi pe loc mi-a încolţit o idee asemănătoare. Aşa că m-am pus pe treaba, farsa având ca ţintă un client pe care-l cunosc bine şi ştiu că nu se supără (sau cel puţin aşa sper).

Pe scurt, vreau să inversez toate link-urile de pe un „site”, având acces la codul sursă, bineînteles. Adică un link se transformă în knil nu. Restul textului de pe site rămâne neschimbat iar URL-urile funcţionează în continuare. Am pus site între ghilimele deoarece nu e vorba de un site cu mii de useri online ci e vorba de un backend la care au acces 5-6 persoane.

Soluţia tehnică se bazează pe funcţionalitatea de output buffering pe care o oferă PHP-ul. Funcţia de mai jos este un callback pentru ob_start();

[code lang="php"]function link_reverse($buffer){
  if (preg_match_all("|(.*)|U", $buffer, $regs, PREG_PATTERN_ORDER)){
    for ($i = 0; $i < count($regs[1]); $i++){
      $text = $regs[1][$i];
      if (!eregi("^[a-z0-9\.\ \-]*$", $text)){
        //nu avem doar un simplu text in interiorul ancorei, ignoram
        continue;
      }
      $reverse = "";
      for($j = strlen($text) - 1; $j >= 0; $j--){
        $reverse .= $text[$j];
      }
      $buffer = str_replace(">" . $text . "<", ">" . $reverse . "<", $buffer);
    }
  }
  return $buffer;
}[/code]

Aveţi grijă mâine. Noapte bună!