Visualizzazione dei risultati da 1 a 5 su 5

Discussione: preg_replace

  1. #1
    Utente di HTML.it L'avatar di gasmor
    Registrato dal
    Apr 2004
    Messaggi
    1,768

    preg_replace

    ciauz a tuttiz

    ho difficoltā nell'usare preg_replace (sicuramente sbaglio qualcosa nella RegExp)


    Codice PHP:
    $testo "[*code*] [url=""][b]ciao[/b][/url] [*/code*]";
    # utilizzo gli * per non farlo interpretare da questo forum

    $replace htmlspecialchars('\$1');

    $pattern "/\[code\](.+)\[\/code\]/i";


    $testo preg_replace($pattern$replace$testo); 
    ma non mi succede nulla :master:
    Hai provato a creare un sito con Jaaxo Cms PHP5? new!

  2. #2
    Utente di HTML.it L'avatar di gasmor
    Registrato dal
    Apr 2004
    Messaggi
    1,768
    ho provato cosė:

    Codice PHP:

    $testo 
    '[*code*] [url=""][b]ciao[/b][/url] [*/code*][COLOR=red]io[/COLOR] [*code*] [b]pluto[/b][*/code*]';
    #utilizzo gli * per fare interpretare il codice da questo forum

    $replace htmlspecialchars('\\1');
    $pattern "/\[code\](.+)\[\/code\]/i";
    $testo preg_replace($pattern$replace$testo); 
    funziona ma non in modo corretto:

    1) htmlspecialchars() non viene eseguito;
    2) la ricerca si ferma al secondo [*/code*] mentre dovrebbe fermarsi una volta al primo, fare le modifiche, quindi stampare "io " poi elaborare l'altra parte

    :master:

    insomma ottengo:


    ciao [/code]io[code] pluto


    mentre dovrei ottenere:

    <a href=""><b>ciao</b></a>io<b>pluto</b>




    :master:
    Hai provato a creare un sito con Jaaxo Cms PHP5? new!

  3. #3
    per dire a preg_replace di eseguire codice php devi usare il modificatore di criterio "e":
    Codice PHP:
    $pattern "/\\[mode\\](.+)\\[\\/mode\\]/i[B]e[/B]"
    secondo poi come replacement devi passare una stringa, mentre quello che fai tu č semplicemente associare a $replace il valore restituito da htmlspecialchars. Devi scrivere cosė:
    Codice PHP:
    $replace "htmlspecialchars('$1')"
    ho cambiato l'escape con il dollaro che sono pių comodo.
    Mentre per invertire la voracitā di riconoscimento in modo che la funzione riconosca anche i tag in mezzo alla stringa devi usare o il modificatore "U" oppure il punto interrogativo dopo l'asterisco:
    Codice PHP:
    $pattern "/\\[mode\\](.+[B]?[/B])\\[\\/mode\\]/i[B]e[/B]"
    $pattern "/\\[mode\\](.+)\\[\\/mode\\]/i[B]eU[/B]"
    dA .. foto di viaggio
    L'esperienza č il tipo di insegnante pių difficile.
    Prima ti fa l'esame, e poi ti spiega la lezione.

  4. #4
    Utente di HTML.it L'avatar di gasmor
    Registrato dal
    Apr 2004
    Messaggi
    1,768
    grazie, la tua risposta mi ha aiutato a trovare la giusta soluzione.

    come dici non tu funziona

    sono riuscito in questo modo:

    $pattern = "/\[code[^\]]*?\].*?\[\/code\]/ie";
    $replace = "htmlspecialchars('$0')";



    in pratica ho inserito la "e" alla fine del pattern ed ho messo il contenuto di $replace tra le virgolette (come avevi detto)

    ora ottengo (giustamente):

    [*code*] <a href=\"\"><b>ciao</b></a> [*/code*]io pippo[*code*] <b>pluto</b>[*/code*]

    se volessi eliminare anche [*code*] e [*/code*] come dovrei fare

    :master:
    Hai provato a creare un sito con Jaaxo Cms PHP5? new!

  5. #5
    strano non funzioni. Ti posto lo script:
    Codice PHP:
    $testo '[mode] [url=""][b]ciao[/b][/url] [/mode]io [mode] [b]pluto[/b][/mode]';


    $replace "htmlspecialchars('$1')";
    $pattern "/\\[mode\\](.*?)\\[\\/mode\\]/ie";
    echo 
    $testo preg_replace($pattern$replace$testo); 
    quando lo usi nel codice cambia la "m" in "c", che avevo scritto mode per evitare il riconoscimento del tag al forum.
    dA .. foto di viaggio
    L'esperienza č il tipo di insegnante pių difficile.
    Prima ti fa l'esame, e poi ti spiega la lezione.

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.