Ciao a tutti, sono nuovo nel forum e mi affido alla vostra skill per venirne fuori da un problema che mi ha creato i crampi ala pancia.
Allora:
la funzione semplice di eregi_replace la scrivo così:

Codice PHP:
function testo($testo){
$testo eregi_replace("\\[Purl]([-_./a-z 0-9!&%#?+,'=:;@~]+)\\[PurlE]","\\\1"),$testo);
return 
$testo;} 
Quindi, dato un testo del tipo:

Codice PHP:
$stringa testo("Creo una stringa che [Purl]contiene[PurlE] il testo per la funzione"); 
Il risultato sarà effettivamente:
Creo una stringa che contiene il testo per la funzione

E fino a qui, tutto ok.

Il mio problema nasce dal fatto che, all'interno dei campi di delimitazione (quindi [Purl] e [PurlE]), vorrei metterci dei numeri, i quali vanno a pescare tale numero all'interno di un database.

Quindi scrivendo la stringa:

Codice PHP:
$string "Mi piace molto [Purl]5[PurlE] e [Purl]13[PurlE]; 
ritornandomi come risultato:

Mi piace molto pane e vino

Ho provato in vari modi, ve ne espongo uno, quello che pensavo andar bene:

Codice PHP:
// funzione per andare a cercare gli ID nel database
function searchDB($stringa,$database_DB,$DB){
// seleziono il db
mysql_select_db($database_DB$DB);
// la query
$query_search_pietanza "SELECT * FROM pietanze WHERE id = '".$stringa."'";
$search_pietanza mysql_query($query_search_pietanza$DB) or die(mysql_error());
$row_search_pietanza mysql_fetch_assoc($search_pietanza);
$totalRows_search_pietanza mysql_num_rows($search_pietanza);
//la stringa che mi ritorna
return $row_search_pietanza['nome_pietanza'];
}

// ora riscrivo la funzione testo con la modifica per la richiesta al database 

function testo($testo,$database_DB,$DB){

$testo eregi_replace("\\[Purl]([0-9!&%#?+,'=:;@~]+)\\[PurlE]",searchDB("\\1",$database_DB,$DB),$testo);

return 
$testo;} 
Con questa funzione, in realtà funziona... ma male. Mooooolto male!!!
Ovvero, sì, va a pescarmi dal database i dati, me li reistituisce, MA...
mi prende sempre l'ID 1.
L'ID, ossia l'1, viene preso dalla funzione searchDB(\\1,....)...all'interno dell'eregi_replace
Il mio risultato della precedente stringa sarà quindi:
Mi piace molto pasta e pasta

Quindi, quando il risultato dell'eregi_replace non è richiamato all'interno di una funzione, da il risultato sperato, nel momento che è all'interno di una funzione (in questo caso searchDB) diventa una stringa a tutti gli effetti.

Spero di essermi spiegato bene.
Come posso ovviare a questo problema? Il fatto di fare due funzioni è dato dal fatto che all'interno di reregi_replace non posso creare un costrutto, però mettere una funzione all'interno dello stessoè consentito.

Grazie a tutti quanti