Păcăleală de 1 aprilie, pentru PHPişti
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ă!