Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    Sostituzione tag [url] in una stringa

    Ciao a tutti!
    In quasi tutti i forum e guestbook c'è la possibilità di inserire del testo racchiuso tra tag "speciali" come ad esempio [url], [img], [b], ecc...

    Se io per esempio volessi sostituire il testo " [url_prova]http:\\www.prova.it[/url_prova] " con il link al sito www.prova.it, come posso fare utilizzando le funzioni di php?
    Lo stesso metodo poi lo applicherei anche a tutti gli altri tag ovviamente...
    Grazie!

  2. #2
    Devi usare le RegEx, ti passo una funzione che feci tanto tempo fà:
    Codice PHP:
    function parsebb($post){
    $message=$post;
    $bb = array();
    //Bold
    $bb[0]['regex'] = "#\[b\](.*?)\[/b\]#si";
    $bb[0]['replace'] = "[b]$1[/b]";
    //Center
    $bb[1]['regex'] = "#\[center\](.*?)\[/center\]#si";
    $bb[1]['replace'] = "<center>$1</center>";
    //Underline
    $bb[2]['regex'] = "#\[u\](.*?)\[/u\]#si";
    $bb[2]['replace'] = "<u>$1</u>";
    //Italic
    $bb[3]['regex'] = "#\[i\](.*?)\[/i\]#si";
    $bb[3]['replace'] = "[i]$1[/i]";
    //Color
    $bb[4]['regex'] = "#\[color=([a-zA-Z]*|\#?[0-9a-fA-F]{6})](.*?)\[/color\]#si";
    $bb[4]['replace'] = '<font color="$1">$2</font>';
    //URL Complex
    $bb[5]['regex'] = "#\[url=(.*?)](.*?)\[/url\]#si";
    $bb[5]['replace'] = '[url="$1"]$2[/url]';
    //URL Simple
    $bb[6]['regex'] = "#\[url\](.*?)\[/url\]#si";
    $bb[6]['replace'] = '[url="$1"]$1[/url]';
    //Quote
    $bb[7]['regex'] = "#\[quote\](.*?)\[/quote\]#si";
    $bb[7]['replace'] = '<blockquote>$1</blockquote>';
    //Code
    $bb[8]['regex'] = "#\[code\](.*?)\[/code\]#si";
    $bb[8]['replace'] = '<code>$1</code>';
    //Img
    $bb[9]['regex'] = "#\[img\](.*?)\[/img\]#si";
    $bb[9]['replace'] = '[img]$1[/img]';

    foreach(
    $bb as $tato){
    $message preg_replace($tato['regex'],$tato['replace'],$message);
    }
    return 
    stripslashes($message);

    Ti consiglio di approfondire le RegEx

  3. #3
    Grazie x la risposta però non riesco a far funzionare la funzione correttamente

    L'ho ridotta in questo modo (mi serve solo il per il tag [url])

    Codice PHP:
    function parsebb($post){
    $message=$post;
    $bb = array();

    $bb[0]['regex'] = "#[url.](.*?)[/url.]#si";        //ho messo di proposito il . dopo i tag x il forum
    $bb[0]['replace'] = '[url="$1"]$1[/url]';


    foreach(
    $bb as $tato){
    $message preg_replace($tato['regex'],$tato['replace'],$message);
    }
    return 
    stripslashes($message);

    però nn funziona come dovrebbe e non essendo molto pratico di espressioni regolari non saprei sistemarla...

    Ad esempio, mettendo come testo:

    prova di collegamento [url.]http://www.prova.it[/url.]
    (non considerare il . dopo il tag url)

    mi modifica il testo in questo modo:

    pova di coegamento []http://www.pova.it[l]
    la parte sottolineata è quella che mi vede come link


    Come posso fare per sistemare la funzione? Grazie mille...

  4. #4
    Utente di HTML.it
    Registrato dal
    Nov 2001
    Messaggi
    24
    $bb[0]['regex'] = "#[url.](.*?)[/url.]#si";
    aggiungi i backslash

    $bb[0]['regex'] = "#\[url.](.*?)\[/url.]#si";
    poi se devi usare solo una funzione, puoi "alleggerire" il tutto

    $message = preg_replace("#\[url.](.*?)\[/url.]#si",'$1',$message);

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.