Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    227

    Passare valore preg_replace

    Ciao a tutti ragazzi, ho una stringa di questo tipo

    codice:
    $string = preg_replace("/({TEXT: )(.+?)(})/i", formatText("$2"), $string);
    dove la funzione formatText() restituisce la stringa ricevuta in un testo formattato.
    La domanda è: come posso passare il valore di $2 alla funzione?
    Scritto così non me lo passa nel modo corretto e non capisco proprio come fare

    Per farvi capire meglio:

    Codice PHP:

    function formatText($text){
        return 
    $text;
    }

    $string "{TEXT: testo da convertire}";

    $string preg_replace("/({TEXT: )(.+?)(})/i"formatText("$2"), $string);

    echo 
    $string//mostra "testo da convertire"; 
    mentre

    Codice PHP:
    function formatTexts($text){
        return 
    strlen($text);
    }

    $string "{TEXT: testo da convertire}";

    $string preg_replace("/({TEXT: )(.+?)(})/i"formatTexts("$2"), $string);

    echo 
    $string//ritorna 2, che sarebbe la lunghezza della stringa "$2" 
    Qualche idea?

  2. #2
    La domanda è: come posso passare il valore di $2 alla funzione?
    Ho capito dove usi $2, la domanda è: cosa non riesci a fare? non ho capito che devi fare

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    227
    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

    codice:
    Voce 1
    
    Voce 2
    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?

  4. #4
    provato a togliere i doppi apici attorno al nome della variabile $2?

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    227
    Mi ritorna sempre l'errore :/
    codice:
    Parse error: syntax error, unexpected '2' (T_LNUMBER), expecting variable (T_VARIABLE) or '$' in /menu.php on line 28
    Dove la riga 28 sarebbe

    codice:
    $pagina = preg_replace("/(<!--{DOCUMENT.MENU})(.+?)(--!>)/i", getMenu($2), $pagina);

  6. #6
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    227
    La cosa che non capisco è che se faccio

    Codice PHP:
    function getMenu($data){
        return 
    $data;

    Torna la stringa giusta, ma se faccio

    Codice PHP:
    function getMenu($data){
        return 
    strlen($data);

    per vedere quant'è lunga la stringa, torna sempre 2, ovvero la lunghezza di "$2"

  7. #7
    prima di fare il preg_replace hai provato a stampare a video la pagina?

  8. #8
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    227
    Ho provato adesso, questo è l'output generato facendo echo $pagina; e poi il preg_replace:

    codice:
    Pagina normale:
    <!--{DOCUMENT.MENU}{_DOCUMENT.MENU.TITLE_}
    --!>
    
    Con preg_replace:
    {_DOCUMENT.MENU.TITLE_}
    
    {_DOCUMENT.MENU.TITLE_}
    Qualche altra idea?

  9. #9
    separa

    il "formatText" fallo in una riga da solo, fatti in questo modo ritornare la stringa.

    poi la preg_replace falla puntare al nome di una variabile e non al nome di una funzione.

  10. #10
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    227
    Intendi qualcosa del genere?

    Codice PHP:
    $aux preg_replace("/(<!--{DOCUMENT.MENU})(.+?)(--!>)/i""$2"$pagina);
    $pagina preg_replace("/(<!--{DOCUMENT.MENU})(.+?)(--!>)/i"getMenu($aux), $pagina); 
    Provo a modificarlo un po' intanto, perchè così dà un paio di errori .-.

    codice:
    $pagina = "<div id=\"menu\"><!--{DOCUMENT.MENU}<a href=\"{_DOCUMENT.MENU.LINK_}\">{_DOCUMENT.MENU.TITLE_}</a>
    --!></div>\n";
    
    OUTPUT:
    
    
    <div id="menu">
    <div id="menu">Voce 1
    </div>
    <div id="menu">Voce 2
    </div>
    </div>

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.