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ă!