Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11

Discussione: VBcode

  1. #1

    VBcode

    ciao a tutti

    per fare il "VBcode" nei moduli sul mio sito, passo il messaggio

    attraverso degli str_replace....


    se b è piccolo viene trasformato in grassetto... ma come faccio se l'utente scrive [ B ] grande, al posto che piccolo?


    come posso ovviare il problema? riscrivendo un'altro str_replace?

    codice:
    $messagggio = str_replace('', '', $messagggio);
    $messagggio = str_replace('', '', $messagggio);
    $messagggio = str_replace('', '<u>', $messagggio);
    $messagggio = str_replace('', '</u>', $messagggio);
    $messagggio = str_replace('[/I]', '[/i]', $messagggio);
    $messagggio = str_replace('[I]', '[i]', $messagggio);
    PIERCHI

  2. #2
    ah come mi ha modificato il codice


    forum di cacca
    PIERCHI

  3. #3
    Utente bannato
    Registrato dal
    Apr 2004
    Messaggi
    1,392

    Re: VBcode

    Originariamente inviato da pierchi
    ciao a tutti

    per fare il "VBcode" nei moduli sul mio sito, passo il messaggio

    attraverso degli str_replace....


    se b è piccolo viene trasformato in grassetto... ma come faccio se l'utente scrive [ B ] grande, al posto che piccolo?


    come posso ovviare il problema? riscrivendo un'altro str_replace?

    codice:
    $messagggio = str_replace('', '', $messagggio);
    $messagggio = str_replace('', '', $messagggio);
    $messagggio = str_replace('', '<u>', $messagggio);
    $messagggio = str_replace('', '</u>', $messagggio);
    $messagggio = str_replace('[/I]', '[/i]', $messagggio);
    $messagggio = str_replace('[I]', '[i]', $messagggio);
    Non ti consiglio di fare così, perchè se uno lascia [b] aperto come fai? utilizza le espressioni regolari:
    $messaggio = preg_replace("|\[B\](.+)\[\/B\]|iu", "\\1", $messaggio); ti dovrebbe andare, prova e posta...


  4. #4
    $messaggio = &preg_replace( "/(?i)\[b\]([^\a]+?)\[\/b\]/i", "\\1", $messaggio );
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  5. #5
    $messaggio = preg_replace('/\\[([a-zA-Z]){1}\\]([^\\[]*)\\[\/\\1]/i', '<\\1>\\2</\\1>', $messaggio);

    Ciao!
    BluePine Technology
    Virtual hosting - Server Dedicati - Sviluppo applicazioni

  6. #6


    mi avete messo 3 codici diversi.. potete dirmi cosa significano
    PIERCHI

  7. #7
    provato, funziona...

    e per i colori o [img]

    come lo modifico
    PIERCHI

  8. #8
    Ovviamente non si può fare un corso di espressioni regolari in un thread ma ti posso spiegare brevemente la mia regex:

    /i = case insensitive (ops, è inutile! me ne sono accorto ora)

    \[([a-zA-Z]){1}\\] tra parentesi quadre (precedute da \ in quanto la parentesi quadra ha un significato preciso nelle espressioni regolari) prende un solo carattere che sia alfabetico, maiuscolo o minuscolo. Quindi [b], [u], [i] soddisfano l'espressione, [img] no perché sono 3 caratteri. Le parentesi tonde indicano che il singolo carattere deve essere "catturato" in una "backreference", cioè un'entità a cui potrai riferirti in seguito. In questo caso si tratta della prima backreference dell'espressione: d'ora in avanti ci si riferirà ad essa come \1 (o, in php, \\1).

    ([^\\[]*) letteralmente significa "prendi 0 o più caratteri rappresentati dal carattere * finché non trovi una parentesi quadra aperta che si scrive ^\\[ " (cioè la fine del tag). Il tutto è racchiuso tra parentesi quadre; ciò che è racchiuso tra parentesi quadre è una "classe di caratteri". [abc] significa che sia a sia b sia c soddisfano l'espressione, mentre [^a] significa qualsiasi carattere che non sia a. L'asterisco significa "0 o più".

    \\[\/\\1] verifica che dopo il testo prelevato al punto precedente il tag venga chiuso. Si fa riferimento alla backreference \1 che era il nostro tag di partenza. In pratica per soddisfare questa parte di espressione ci deve essere una quadra aperta, un letterale \, il carattere prelevato nella prima backreference e quindi la quadra chiusa.

    Spero di essere stato chiaro.

    Ciao!

    Stefax
    BluePine Technology
    Virtual hosting - Server Dedicati - Sviluppo applicazioni

  9. #9
    Originariamente inviato da Stefax
    $messaggio = preg_replace('/\\[([a-zA-Z]){1}\\]([^\\[]*)\\[\/\\1]/i', '<\\1>\\2</\\1>', $messaggio);

    Ciao!
    bello .. [f]dici che il tag <f> e' una dritta per l'output[/f] ?

    a sto punto sarebbe meglio cosi' :

    $messaggio = &preg_replace('/(?i)\\[(b|u|i){1}\\]([^\\[]*)\\[\/\\1]/i', '<\\1>\\2</\\1>', $messaggio);

    o no ?


    P.S. poi il tutto tranne \[ non ha senso, se volessi boldare [questo] come si comporterebbe ???
    poi inutile parsare [a][/a] senza alcun carattere in mezzo ...

    codice:
    $messaggio = &preg_replace( "/(?i)\[(b|u|i)\]([^\a]+?)\[\/\\1]/i", "<\\1>\\2</\\1>", $messaggio );
    [ questo senza considerare che in html il tag <u> non esiste, andrebbe sostituito con style="text-decoration: underline" ]
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  10. #10
    Scusa, non è per essere pignolo ma se il tag <u> come dici tu non esiste credo di aver trovato un bug nell'HTML validator del w3c. Infatti:

    <HTML>
    <HEAD>
    <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
    <TITLE>Untitled Document</TITLE>
    </HEAD>

    <BODY>
    I testi <u>sono sottolineati</u>
    </BODY>
    </HTML>


    viene validato dal w3c come HMTL 4.01 transitional.

    Comunque sono perfettamente d'accordo che la mia regex soddisfa anche tag che non sono validi, però almeno sostituisce tutti i bold, italic, underline con una regex sola

    Ciao!

    StefaX
    BluePine Technology
    Virtual hosting - Server Dedicati - Sviluppo applicazioni

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.