Il fatto è che se in formatText() ritorno $2 senza formattazione nè altro non ho problemi, se invece provo a fare strlen($2) mi torna 2, e non la vera lunghezza della stringa
Lo scopo di tutto questo sarebbe fare una specie di "linguaggio" molto base che converte stringhe semplici in valori presi dal db. Un piccolo esempio:
Codice PHP:
$versione = "1.0";
$pagina = "tutto il codice della pagina web
La versione che stai utilizzando e' la [b]{_VERSION_}[/b]";
$pagina = str_replace("{_VERSION_}", $versione, $pagina);
echo $pagina;
Tornando al problema di prima, ti posto dove riscontro realmente il problema 
Codice PHP:
$pagina = "<!--{DOCUMENT.MENU}<a href=\"{_DOCUMENT.MENU.LINK_}\">{_DOCUMENT.MENU.TITLE_}</a>
--!>";
Questa stringa dovrebbe essere convertita automaticamente con una cosa simile
Ora, il problema è quando uso preg_replace:
Codice PHP:
function getMenu($data){
$return = false;
$menu = array(
array(
"link" => "http://google.it/",
"title" => "Voce 1"
),
array(
"link" => "http://google.it/",
"title" => "Voce 1"
)
);
for($i=0;$i<=count($menu)-1;$i++){
$thisVoice = $data;
$thisVoice = str_replace("{_DOCUMENT.MENU.LINK_}", $menu[$i]["link"], $thisVoice);
$thisVoice = str_replace("{_DOCUMENT.MENU.TITLE_}", $menu[$i]["title"], $thisVoice);
$return .= $thisVoice;
}
return $return;
}
$pagina = preg_replace("/(<!--{DOCUMENT.MENU})(.+?)(--!>)/i", getMenu("$2"), $pagina);
echo $pagina;
Dovrebbe passare $2 (ovvero tutto il contenuto del menu da convertire nelle rispettive voci), alla funzione getMenu(), solo che quando lo fa è come se ricevesse la stringa "$2", e non il valore di $2, mi spiego?