• Super User

    Ciao,
    visto che sto usando il codice nel filme che mette i dati nel mysql ho invertito le due parti:

    [php]
    $to = mysql_real_escape_string(strip_tags($_REQUEST["to"]));
    $subject = mysql_real_escape_string(strip_tags($_REQUEST["subject"]));
    $pre_message = mysql_real_escape_string($_REQUEST["message"]);

    function bbcode_format($var) {
    $search = array(
    '<strong>$1</strong>',
    '<em>$1</em>',
    '<u>$1</u>',
    '<img src="$1" />',
    '<a href="$1">$1</a>',
    '<br />'
    );
    $replace = array(
    '/(.*?)/is', //<-- riga 44
    '/(.?)/is',
    '/
    (.?)/is',
    '//is',
    '/(.*?)/is',
    '\n'
    );
    $var = preg_replace ($search, $replace, $var); //<-- riga 59
    return $var;
    }

    $message_a = str_replace('\n', '', $pre_message);
    $message_b=bbcode_format($message_a);
    $message = strip_tags($message_b);
    [/php]

    però mi da

    Warning: preg_replace() [function.preg-replace]: Unknown modifier '$' in C:\xampp\htdocs\nfs\sendpm.php on line 59


  • ModSenior

    Devi invertire pure $1 con (.*?).
    Però che senso ha convertire l'html in bbcode? Dovresti convertirlo nuovamente per utilizzarli...


  • Super User

    Ora che mi ci fai pensare... hai ragione... per qualche ragione ho pensato di far inserire tag html, convertirli in bbcode e poi convertire il bbcode in html... fare php per lunghi periodi fa MALE 😮

    UPDATE: il mio codice in un file esterno richiamato poi con require_once:

    [php]
    <?php

    function bbcode_format($var) {
    $search = array(
    '',
    '',
    '
    ',
    '',
    '',
    '\n',
    '[:)]',
    '[O:)]',
    '[:@]',
    '[:S]',
    '[:
    (]',
    '[£:)]',
    '[:$]',
    '[:O]',
    '[:(]',
    '[8)]',
    '[:D]',
    '[:P]',
    '
    ',
    '[;)]'
    );
    $replace = array(
    '<strong>(.
    ?)</strong>',
    '<em>(.
    ?)</em>',
    '<u>(.?)</u>',
    '<img src="(.
    ?)" />',
    '<a href="(.*?)">$1</a>',
    '<br />',
    '<img src="img/smile/smile1.gif">',
    '<img src="img/smile/smile2.gif">',
    '<img src="img/smile/smile3.gif">',
    '<img src="img/smile/smile4.gif">',
    '<img src="img/smile/smile5.gif">',
    '<img src="img/smile/smile6.gif">',
    '<img src="img/smile/smile7.gif">',
    '<img src="img/smile/smile8.gif">',
    '<img src="img/smile/smile9.gif">',
    '<img src="img/smile/smile10.gif">',
    '<img src="img/smile/smile11.gif">',
    '<img src="img/smile/smile12.gif">',
    '<img src="img/smile/smile13.gif">',
    '<img src="img/smile/smile14.gif">'
    );
    $var = preg_replace ($search, $replace, $var);
    return $var;
    }

    ?>
    [/php]

    L'errore:
    Warning: preg_replace() [function.preg-replace]: Unknown modifier '[' in C:\xampp\htdocs\nfs\bbc.php on line **48

    :arrabbiato:
    **


  • ModSenior

    Prova cosi:
    [php]
    <?php

    function bbcode_format($var) {
    $search = array(
    '/[b](.?)[/b]/is',
    '/[i](.
    ?)[/i]/is',
    '/[u](.?)[/u]/is',
    '/[img](.
    ?)[/img]/is',
    '/[url](.?)[/url]/is',
    '',
    '\n',
    '[:)]',
    '[O:)]',
    '[:@]',
    '[:S]',
    '[:
    (]',
    '[£:)]',
    '[:$]',
    '[:O]',
    '[:(]',
    '[8)]',
    '[:D]',
    '[:P]',
    '',
    '[;)]'
    );
    $replace = array(
    '<strong>(.
    ?)</strong>',
    '<em>(.?)</em>',
    '<u>(.
    ?)</u>',
    '<img src="(.?)" />',
    '<a href="(.
    ?)">$1</a>',
    '<br />',
    '<img src="img/smile/smile1.gif">',
    '<img src="img/smile/smile2.gif">',
    '<img src="img/smile/smile3.gif">',
    '<img src="img/smile/smile4.gif">',
    '<img src="img/smile/smile5.gif">',
    '<img src="img/smile/smile6.gif">',
    '<img src="img/smile/smile7.gif">',
    '<img src="img/smile/smile8.gif">',
    '<img src="img/smile/smile9.gif">',
    '<img src="img/smile/smile10.gif">',
    '<img src="img/smile/smile11.gif">',
    '<img src="img/smile/smile12.gif">',
    '<img src="img/smile/smile13.gif">',
    '<img src="img/smile/smile14.gif">'
    );
    $var = preg_replace ($search, $replace, $var);
    return $var;
    }

    ?>
    [/php]


  • ModSenior

    Ho provato io e da errore, la soluzione definitiva dovrebbe essere questa:
    [php]
    function bbcode_format($var) {
    $search = array(
    "/[b](.?)[/b]/is",
    "/[i](.
    ?)[/i]/is",
    "/[u](.?)[/u]/is",
    "/[img](.
    ?)[/img]/is",
    "/[url](.?)[/url]/is",
    '/\n/',
    '/[:)]/',
    '/[O:)]/',
    '/[:@]/',
    '/[:S]/',
    '/[:
    (]/',
    '/[£:)]/',
    '/[:$]/',
    '/[:O]/',
    '/[:(]/',
    '/[8)]/',
    '/[:D]/',
    '/[:P]/',
    '/*/',
    '/[;)]/'
    );
    $replace = array(
    '<strong>$1</strong>',
    "<em>$1</em>",
    "<u>$1</u>",
    '<img src="$1" />',
    '<a href="$1">$1</a>',
    '<br />',
    '<img src="img/smile/smile1.gif">',
    '<img src="img/smile/smile2.gif">',
    '<img src="img/smile/smile3.gif">',
    '<img src="img/smile/smile4.gif">',
    '<img src="img/smile/smile5.gif">',
    '<img src="img/smile/smile6.gif">',
    '<img src="img/smile/smile7.gif">',
    '<img src="img/smile/smile8.gif">',
    '<img src="img/smile/smile9.gif">',
    '<img src="img/smile/smile10.gif">',
    '<img src="img/smile/smile11.gif">',
    '<img src="img/smile/smile12.gif">',
    '<img src="img/smile/smile13.gif">',
    '<img src="img/smile/smile14.gif">'
    );
    $var = preg_replace($search, $replace, $var);
    return $var;
    }
    [/php]


  • Super User

    Grazie thedarkita 😄

    la parte relativa alla formattazzione del testo funziona. Però ho dei problemi con gli smilies 😞 Ad esempio basta che io nel testo inserisca una 'S', che lo interpreta come [:S] e lo traduca nella corrispondente immagine.

    Ad esempio mettendo [:D]

    Il risultato è l'equivalente di:

    [:):D]

    Possibili soluzioni? :mmm:
    max

    PS: Credo (basato esclusivamente su un'opinione personale) che allo script basti UN elemento in comune (eg: in [:S] basta che trovi una 'S' perchè converta l'immagine). Cosa ne pensi?


  • ModSenior

    A via di mettere / e \ sto impazzendo. 😄
    Un paio li ho sistemati, gli altri sto impazzendo... Fai prima a fare un str_replace per le faccine invece che fare le espressioni regolari inutilmente secondo me.

    [php]
    function bbcode_format($var) {
    $search = array(
    "/[b](.?)[/b]/is",
    "/[i](.
    ?)[/i]/is",
    "/[u](.?)[/u]/is",
    "/[img](.
    ?)[/img]/is",
    "/[url](.?)[/url]/is",
    '/\n/',
    "/[:)]/",
    "/[\O:)]/",
    "/[:@]/",
    "/[:S]/",
    "/[:
    ]/",
    "/[\£:)]/",
    "/[:$]/",
    "/[:O]/",
    "/[;)]/",
    "/[:(]/"
    );
    $replace = array(
    '<strong>$1</strong>',
    "<em>$1</em>",
    "<u>$1</u>",
    '<img src="$1" />',
    '<a href="$1">$1</a>',
    '<br />',
    '<img src="img/smile/smile1.gif">',
    '<img src="img/smile/smile2.gif">',
    '<img src="img/smile/smile3.gif">',
    '<img src="img/smile/smile4.gif">',
    '<img src="img/smile/smile5.gif">',
    '<img src="img/smile/smile6.gif">',
    '<img src="img/smile/smile7.gif">',
    '<img src="img/smile/smile8.gif">',
    '<img src="img/smile/smile9.gif">',
    '<img src="img/smile/smile10.gif">'
    );
    $var = preg_replace($search, $replace, $var);
    return $var;
    }
    [/php]


  • Super User

    Grazie mille 😄


  • ModSenior

    Vedi che mancano 4 faccine però...
    Perchè una non sono riuscito a farla andare.
    Ti consiglio comunque di fare un str_replace per le faccine, che sicuramente è molto più comodo.


  • Super User

    Si ho usato uno str_replace e funziona 😄

    Ho ancora un dubbio... in pratica avrei bisogno che continuasse la ricerca di bbcode da rimpiazzare anche all'interno degli stessi... esempio:

    
    [table] [table] [/table] [/table]
    
    ```dove il codice '[table]' è (per esempio):
    
    

    <table border="1">
    <tr>
    <td>

    </td>
    </tr>
    </table>

    
    

    <table border="1">
    <tr>
    <td>
    [table][/table]
    </td>
    </tr>
    </table>
    [/table]

    
    mentre io vorrei che fosse
    
    

    <table border="1">
    <tr>
    <td>

    <table border="1">
    <tr>
    <td>
    </td>
    </tr>
    </table>

    </td>
    </tr>
    </table>


  • ModSenior

    Il problema è che considera sempre la prima apertura e la prima chiusura che trova...
    Non mi viene niente in mente... :mmm:


  • Super User

    Il codice in questione:

    [php]
    "/[premsg](.*?)[/premsg]/is"
    [/php][php]
    '<table border="1" STYLE="border-style:none; font-size:12px" width="700"><tr bgcolor="FFCC99"><td>$1</td></tr></table>'
    [/php]eppure ci sono numerosi forum e cms che fanno uso di questo sistema di "tabella in tabella" per segnalare (ad esempio) quote di quote... mmh... :mmm:

    PS:

    Esempio di codice risultante da uso di [premsg] testo [premsg] altro testo[/premsg][/premsg]:

    
    <br /><table border="1" STYLE="border-style:none; font-size:12px" width="700"><tr bgcolor="FFCC99"><td>
    <br />____________________
    <br />max0005 wrote:
    <br />
    <br />sdfdddssd
    <br />
    <br />[premsg]
    <br />____________________
    <br />max0005 wrote:
    <br />
    <br />gaaamesgaaames</td></tr></table>[/premsg]
    
    

  • ModSenior

    Cosi dovrebbe andare:
    [php]
    <?php

    function bbcode_format($var) {
    $search = array(
    "/[b](.?)[/b]/is",
    "/[i](.
    ?)[/i]/is",
    "/[u](.?)[/u]/is",
    "/[img](.
    ?)[/img]/is",
    "/[url](.*?)[/url]/is",
    '/\n/'
    );
    $replace = array(
    '<strong>$1</strong>',
    "<em>$1</em>",
    "<u>$1</u>",
    '<img src="$1" />',
    '<a href="$1">$1</a>',
    '<br />'
    );

     while(preg_match("#[table](.*?)[\/table]#is", $var)!=0)
         $var = preg_replace("#[table](.*?)[\/table]#is", '<table>$1</table>', $var);
     $var = preg_replace($search, $replace, $var);
     return $var;
    

    }
    ?>
    [/php]


  • Super User

    Funziona!!! 😄

    Non so davvero come ringraziarti ci avrei passato la notte! :yuppi:


  • ModSenior

    😉