Păcăleală de 1 aprilie, pentru PHPişti
April 1, 2008 – 12:55 amDeschizâ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();
function link_reverse($buffer){ if (preg_match_all("|<a.*>(.*)</a>|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; }
Aveţi grijă mâine. Noapte bună!


3 Responses to “Păcăleală de 1 aprilie, pentru PHPişti”
Nu cred că e backend-ul la care am şi eu acces, nu? Că nu am văzut nici un link invers…
By Syl on Apr 1, 2008
Nu, nu e. Poate la anu!
By Mihai Brehar on Apr 1, 2008