Visualizzazione risultati 1 fino 13 di 13

Discussione: Sostituire determinato testo con una funzione

  1. #1
    L'avatar di miki92
    miki92 non è connesso AlterGuru 2500
    Data registrazione
    21-04-2007
    Residenza
    Procida (NA)
    Messaggi
    4,233

    Predefinito Sostituire determinato testo con una funzione

    Buonasera,

    necessito di sostituire un determinato testo con una determinata funzione, il codice che ho buttato giù è il seguente:

    Codice PHP:
    <?php

    error_reporting
    (E_ALL);

    function
    uno($e){ return "UNO: <strong>".$e."</strong><br /><br />"; }
    function
    due($a){ return "DUE: <strong>".$a."</strong><br /><br />"; }

    $string = file_get_contents("uno.txt");

    $string = preg_replace("{(.*)}",uno("\\1"),$string);
    $string = preg_replace("{{([0-9]+)}}",due("\\1"),$string);

    echo
    $string;

    ?>
    Il file uno.txt contiene un intero codice HTML con all'interno due "parole particolari": {IMMAGINE} e {{356}}.

    Ciò che io voglio fare è sostituire a:

    {IMMAGINE} -> la funzione uno()
    {{356}}] -> la funzione due()

    In pratica necessito di sostituire il contenuto di una o due graffe ad una determinata funzione che restituirà una valore tra esso comprese.

    E' una specie di BBCode...ma che verrà usato in modo differente...l'output di quel codice è il seguente:

    Codice:
    UNO: 
    
    UNO: 
    
    UNO: 
    
    UNO: 
    
    UNO: 
    
    UNO: 
    
    UNO: 
    
    UNO: 
    
    UNO: 
    
    UNO: 
    
    UNO: 
    
    UNO: 
    
    UNO: 
    
    UNO: 
    
    UNO: 
    
    UNO: 
    
    UNO: 
    
    UNO: 
    
    UNO: {IMMAGINE}
    
    {DUE: 356
    
    } 
    
    UNO: 
    
    UNO: 
    
    UNO: 
    
    UNO: 
    
    UNO: 
    
    UNO: 
    
    UNO: 
    
    UNO:
    Naturalmente non è quello che io voglio perchè chissà quale errore ho commesso (ho studiato la guida, ma per me in alcuni punti diventa un po' più complesso seguire quanto spiegato).

    Mi sapreste aiutare a risolvere?
    Apprezzi l'aiuto? Offrimi un caffè!

  2. #2
    Data registrazione
    04-09-2009
    Messaggi
    183

    Predefinito

    Prova a invertire le funzioni di match ("1 graffa" è un sottocaso di "2 graffe"):
    Codice PHP:
    $string = preg_replace("{{([0-9]+)}}",due("\\1"),$string);
    $string = preg_replace("{(.*)}",uno("\\1"),$string);
    Age Of Empires GIF Creator & Archive
    New! Blog informatico di scripting PHP avanzato
    Vuoi giocare online a Age of Empires The Conquerors? -> Usa Voobly !! (MSN Zone non lo supporta più dal 19 giugno 2006)
    Il mio clan di The Conquerors -> Rifugio dei Conquerors
    Il mio stato su Xfire Live Video -> Unreal Tournament 2004
    Facebook MMORPG

  3. #3
    L'avatar di miki92
    miki92 non è connesso AlterGuru 2500
    Data registrazione
    21-04-2007
    Residenza
    Procida (NA)
    Messaggi
    4,233

    Predefinito

    Il risultato non cambia.
    Apprezzi l'aiuto? Offrimi un caffè!

  4. #4
    programmazioned non è connesso Utente attivo
    Data registrazione
    25-03-2008
    Messaggi
    440

    Predefinito

    Codice PHP:
    $string = preg_replace("#\{\{([0-9]+)\}\}#e", 'due(\\1)', $string);
    Le espressioni regolari sono sbagliate.

    Ciao!

    P.S: mi scuso per il doppio post. Non volevo bumpare, avevo capito male il problema.
    Ultima modifica di programmazioned : 06-11-2009 alle ore 20.33.35

  5. #5
    L'avatar di miki92
    miki92 non è connesso AlterGuru 2500
    Data registrazione
    21-04-2007
    Residenza
    Procida (NA)
    Messaggi
    4,233

    Predefinito

    Ottimo funziona, ho provato a rendere un po' più complesso il codice HTML per vedere se funziona correttamente come voglio io o se c'è qualche problema, inoltre volevo testare se funziona anche quando si presentano più casi.

    Il codice nel file uno.txt è il seguente:
    Codice:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    
    <head>
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
    <title>Senza nome 1</title>
    </head>
    
    <body>
    {IMMAGINE} <br /><br /> {{356}}
    
    {ABC} <br /> {6564} <hr /> {{IMAG}} <br /> {{131}}
    </body>
    
    </html>
    L'errore che PHP mi riporta è:
    Codice:
    Parse error: syntax error, unexpected '}' in C:\www\root12\bb.php(12) : regexp code on line 1
    
    Fatal error: preg_replace() [<a href='function.preg-replace'>function.preg-replace</a>]: Failed evaluating code: uno(ABC} &lt;br /&gt; {6564} &lt;hr /&gt; {{IMAG}) in C:\www\root12\bb.php on line 12
    Apprezzi l'aiuto? Offrimi un caffè!

  6. #6
    programmazioned non è connesso Utente attivo
    Data registrazione
    25-03-2008
    Messaggi
    440

    Predefinito

    Posta il nuovo script.

    Ciao!

  7. #7
    L'avatar di miki92
    miki92 non è connesso AlterGuru 2500
    Data registrazione
    21-04-2007
    Residenza
    Procida (NA)
    Messaggi
    4,233

    Predefinito

    Già scusa dimenticavo :

    Codice PHP:
    <?php

    error_reporting
    (E_ALL ^ E_NOTICE);

    function
    uno($e){ return "IMMAGINE: <strong>".$e."</strong><br /><br />"; }
    function
    due($a){ return "NUMERO: <strong>".$a."</strong><br /><br />"; }

    $string = file_get_contents("uno.txt");

    $string = preg_replace("#\{\{([0-9]+)\}\}#e", 'due(\\1)', $string);

    $string = preg_replace("#\{(.*)\}#e", 'uno(\\1)', $string);

    echo
    $string;

    ?>
    Apprezzi l'aiuto? Offrimi un caffè!

  8. #8
    programmazioned non è connesso Utente attivo
    Data registrazione
    25-03-2008
    Messaggi
    440

    Predefinito

    (.*) dovrebbe essere ([A-Z]+) .

    Ciao!

  9. #9
    L'avatar di miki92
    miki92 non è connesso AlterGuru 2500
    Data registrazione
    21-04-2007
    Residenza
    Procida (NA)
    Messaggi
    4,233

    Predefinito

    Ma non mi servono solo lettere, il nome potrebbe contenere anche trattini, underscore, e numeri.
    Apprezzi l'aiuto? Offrimi un caffè!

  10. #10
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,306

    Predefinito

    Usa \w che equivale a [a-zA-Z_], o infine leggiti la guida delle regexp per sapere quali classi predefinite esistono.

  11. #11
    L'avatar di miki92
    miki92 non è connesso AlterGuru 2500
    Data registrazione
    21-04-2007
    Residenza
    Procida (NA)
    Messaggi
    4,233

    Predefinito

    Grazie dreadnaut, per ora ho deciso di fare in questo modo:

    Codice PHP:
    function php($id){ $a = mysql_fetch_array(mysql_query("SELECT * FROM codici WHERE id = '".$id."'")); return "<div class=\"codice\">".nl2br($a['codice'])."</div>"

    $body = preg_replace("#\{([0-9]+)\}#e",'php(\\1)',htmlspecialchars_decode($a['post']));
    echo
    $body;
    Facendo così il codice si vede bene e formattato, però io vorrei che il codice fosse "colorato" pertanto dovrei utilizzare highlight_string():

    Codice PHP:
    function php($id){ $a = mysql_fetch_array(mysql_query("SELECT * FROM codici WHERE id = '".$id."'")); return "<div class=\"codice\">".highlight_string($a['codice'])."</div>"

    $body = preg_replace("#\{([0-9]+)\}#e",'php(\\1)',htmlspecialchars_decode($a['post']));
    echo
    $body;
    Solo che facendo così:

    1. Il codice non si "colora".
    2. Il codice non si formatta.
    3. Non mi viene restituito il div con al suo interno il codice.

    Come mai? Cosa sbaglio ora?
    Apprezzi l'aiuto? Offrimi un caffè!

  12. #12
    programmazioned non è connesso Utente attivo
    Data registrazione
    25-03-2008
    Messaggi
    440

    Predefinito

    Passa true come secondo parametro di highlight_string().

  13. #13
    L'avatar di miki92
    miki92 non è connesso AlterGuru 2500
    Data registrazione
    21-04-2007
    Residenza
    Procida (NA)
    Messaggi
    4,233

    Predefinito

    Non ci avevo pensato, però per comodità mia (e per altro uso) ho risolto con il controllo dell'output buffering.

    Grazie ugualmente.
    Apprezzi l'aiuto? Offrimi un caffè!

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •