• @ldgweb said:

    array ("/\bsito.it\b/i");

    deve essere array ("sito.it");

    Cosi funziona, però mi crea un conflitto con un altro codice, ti spiego:

    Questo è il codice completo

    [PHP]

    $paroleArray = array ("/\bmela\b/i","/\bpera\b/i");
    $replacements = "<span class="badWord">[OK]</span>";

    $sitiArray = array ("sito.it");
    $replacements2 = "<span class="badWord">[GOOD]</span>";
    ...

    echo "<span class="carattereMess">".preg_replace($paroleArray, $replacements, $riga['messaggio'])."</span>";
    echo "<span class="carattereMess">".str_ireplace($sitiArray, $replacements2, $riga['messaggio'])."</span>";
    [/PHP]

    E poi c'è questo che controlla gli url normali inseriti nel campo messaggio

    [PHP]
    //Rende l'URL linkabile nel campo messaggio, ho tolto ^ e $ perché in questa sit non servono
    $messaggio = preg_replace("/(ftp(s|es)?://|sftp://|http(s)?://|www.)[A-Za-z0-9_!#$%&;:.,+=?^{|}()~/-]+(.[a-z]{2,6})((/)[-_!#$%&;:.,+=?^{|}()~A-Za-z0-9/])/","<a class="carattereText" href="$0" target="_blank">$0</a>",$messaggio);
    [/PHP]


  • User

    Che tipo di conflitto?? in ogni caso io farei cosi:

    $paroleArray = array ("/\bmela\b/i","/\bpera\b/i");
    $replacements = "<span class="badWord">[OK]</span>";

    $sitiArray = array ("sito.it");
    $replacements2 = "<span class="badWord">[GOOD]</span>";

    $messaggio = $riga['messaggio'];
    $messaggio = preg_replace($paroleArray, $replacements, $messaggio);
    $messaggio = str_ireplace($sitiArray, $replacements2, $messaggio);

    echo "<span class="carattereMess">".$messaggio."</span>";
    echo "<span class="carattereMess">".$messaggio."</span>";

    //Rende l'URL linkabile nel campo messaggio, ho tolto ^ e $ perché in questa sit non servono
    $messaggio = preg_replace("/(ftp(s|es)?://|sftp://|http(s)?://|www.)[A-Za-z0-9_!#$%&;:.,+=?^{|}()~/-]+(.[a-z]{2,6})((/)[-_!#$%&;:.,+=?^{|}()~A-Za-z0-9/])/","<a class="carattereText" href="$0" target="_blank">$0</a>",$messaggio);


  • @ldgweb said:

    che tipo di conflitto?? In ogni caso io farei cosi:

    $parolearray = array ("/\bmela\b/i","/\bpera\b/i");
    $replacements = "<span class="badword">[ok]</span>";

    $sitiarray = array ("sito.it");
    $replacements2 = "<span class="badword">[good]</span>";

    $messaggio = $riga['messaggio'];
    $messaggio = preg_replace($parolearray, $replacements, $messaggio);
    $messaggio = str_ireplace($sitiarray, $replacements2, $messaggio);

    echo "<span class="caratteremess">".$messaggio."</span>";
    echo "<span class="caratteremess">".$messaggio."</span>"; --> //QUESTO STAMPA DOPPIO PERCIO' L'HO TOLTO

    //rende l'url linkabile nel campo messaggio, ho tolto ^ e $ perché in questa sit non servono
    $messaggio = preg_replace("/(ftp(s|es)?://|sftp://|http(s)?://|www.)[a-za-z0-9_!#$%&;:.,+=?^{|}()~/-]+(.[a-z]{2,6})((/)[-_!#$%&;:.,+=?^{|}()~a-za-z0-9/])/","<a class="caratteretext" href="$0" target="_blank">$0</a>",$messaggio);

    Cosi funziona, però c'è una cosa, io per i siti ho questo array che mi hai dato, ma l'utente quando scrive l'url ci mette il prefisso, perciò se io nell'array inserisco anche il prefisso (che qui non posso mettere perché non sono Premiun), poi a video stampa questo

    [good]
    " target="_blank"[good]

    [PHP]
    $sitiarray = array ("sito.it");
    $replacements2 = "<span class="badword">[good]</span>";
    [/PHP]

    Oppure inserirci qualcosa del genere che annulla il prefisso

    $replacements3 = str_replace("w w w.", "", $messaggio);


  • User

    e allora ti conviene fare un str_replace per rendere i link tutti dello stesso tipo
    [PHP]
    $messaggio = str_replace( array('http:/ /', 'w w w .'), '', strtolower($messaggio);[/PHP]


  • @Apthu said:

    Cosi funziona, però c'è una cosa, io per i siti ho questo array che mi hai dato, ma l'utente quando scrive l'url ci mette il prefisso, perciò se io nell'array inserisco anche il prefisso (che qui non posso mettere perché non sono Premiun), poi a video stampa questo

    [good]
    " target="_blank"[good]

    [PHP]
    $sitiarray = array ("sito.it");
    $replacements2 = "<span class="badword">[good]</span>";
    [/PHP]

    Oppure inserirci qualcosa del genere che annulla il prefisso

    $replacements3 = str_replace("w w w.", "", $messaggio);

    Ho già questo, ma che c'entra col la cosa che ho esposto prima?

    $messaggio = str_ireplace("w w w.","h t t p://",$messaggio);
    $messaggio = str_ireplace("h t t p://h t t p://","h t t p://",$messaggio);
    $messaggio = str_ireplace("h t t p://w w w.","h t t p://",$messaggio);


  • User

    Ho trovato e testato questo pattern e sembra funzionare bene

    [PHP]$pattern = "/(?i)\b((?:https?://|www\d{0,3}[.]|[a-z0-9.-]+[.][a-z]{2,4}/)(?:[^\s()<>]+|(([^\s()<>]+|(([^\s()<>]+)))))+(?:(([^\s()<>]+|(([^\s()<>]+))))|[^\s`!()[]{};:'".,<>?«»????]))/"; $messaggio = preg_replace($pattern, '<a class="caratteretext" href="$1" target="_blank">$1</a>', $messaggio);[/PHP]


  • @ldgweb said:

    Ho trovato e testato questo pattern e sembra funzionare bene

    [PHP]
    $pattern = "/(?i)\b((?:https?://|www\d{0,3}[.]|[a-z0-9.-]+[.][a-z]{2,4}/)(?:[^\s()<>]+|(([^\s()<>]+|(([^\s()<>]+)))))+(?:(([^\s()<>]+|(([^\s()<>]+))))|[^\s`!()[]{};:'".,<>?«»“”‘’]))/";
    $messaggio = preg_replace($pattern, '<a class="caratteretext" href="$1" target="_blank">$1</a>', $messaggio);
    [/PHP]

    Penso di aver risolto così, i siti dell'array li trasforma in [GOOD], mentre gli altri li stampa e sono linkabili..dimmi se può andare

    [PHP]
    //Nel campo messaggio converte in minuscolo e sostituisce in h t t p://
    $messaggio = str_replace( array('h t t p://', 'w w w.'), " h t t p://", strtolower($messaggio));
    $messaggio = str_replace( array('h t t p://h t t p://'), " h t t p://", strtolower($messaggio));

    //Toglie il prefisso ai siti dell'array
    $messaggio = str_replace("h t t p://", "", $messaggio);
    $messaggio = str_replace("w w w.", "", $messaggio); [/PHP]

    EDIT:
    Però mi sono accorto che questo codice che toglie il prefisso, lo toglie a TUTTI i siti, anche a quelli che dovrebbe far passare, che si fa?:x


  • User

    Aggiungilo al replace manualmente cosi lo inserisce solo dove serve:

    $messaggio = preg_replace($pattern, '<a class="caratteretext" href="htt p: / /$1" target="_blank">$1</a>', $messaggio);


  • @ldgweb said:

    Aggiungilo al replace manualmente cosi lo inserisce solo dove serve:

    $messaggio = preg_replace($pattern, '<a class="caratteretext" href="htt p: / /$1" target="_blank">$1</a>', $messaggio);

    Il punto è che devo farlo differenziare, nel senso che deve riconoscere se sono siti che vanno stampati e siti da sostituire con [GOOD]

    Per i siti che vanno stampati ho risolto, ora non riesco a fargli "vedere" gli altri, ti posto il codice dei siti che dovrebbe sostituire (cioè. gli deve togliere il prefisso e stampare [GOOD]), così però non funziona

    [PHP]
    ...
    echo "<div class="tabella-long">";
    //Toglie il prefisso ai siti da convertire
    $messaggio = str_replace("h t t p://", "", strtolower($messaggio));
    $messaggio = str_replace("w w w.", "", strtolower($messaggio));

    $messaggio = $riga['messaggio'];
    $messaggio = preg_replace($paroleArray, $replacements, $messaggio);
    $messaggio = str_ireplace($sitiArray, $replacements2, $messaggio);
    echo "<span class="carattereMess">".$messaggio."</span>";
    echo "</div>"; /* tabella-long */

    ...
    [/PHP]


  • User

    Ho fatto una prova secondo quello che ho capito ed è uscito questo:

    [PHP]$rplKey = '[good]';

    $removeUrlPrefix =
    array(
    'htt p://ww w.'.$rplKey,
    'htt p://'.$rplKey,
    'ww w.'.$rplKey
    );

    $sitiArray = array('badurl.com', 'site2.it');

    $messaggio = <<<MESSAGE
    Ciao htt p://ww w.dominio.com Mondo!
    Ciao htt p://ww w.dominio.com Mondo!
    Ciao htt p://ww w.badurl.com Mondo!
    Ciao htt p://ww w.dominio.com Mondo!
    Ciao ww w.dominio.com Mondo!
    Ciao htt p://dominio.com Mondo!
    MESSAGE;

    $messaggio = str_replace($sitiArray, $rplKey, $messaggio);
    $messaggio = str_replace($removeUrlPrefix, $rplKey, $messaggio);

    $pattern = "/(?i)\b((?:https?://|www\d{0,3}[.]|[a-z0-9.-]+[.][a-z]{2,4}/)(?:[^\s()<>]+|(([^\s()<>]+|(([^\s()<>]+)))))+(?:(([^\s()<>]+|(([^\s()<>]+))))|[^\s`!()[]{};:'".,<>?«»????]))/";

    $messaggio = preg_replace($pattern, '<a class="caratteretext" href="$1" target="_blank">$1</a>', $messaggio);

    echo $messaggio;
    [/PHP]


  • @ldgweb said:

    Ho fatto una prova secondo quello che ho capito ed è uscito questo:

    [PHP]$rplKey = '[good]';

    $removeUrlPrefix =
    array(
    'htt p://ww w.'.$rplKey,
    'htt p://'.$rplKey,
    'ww w.'.$rplKey
    );

    $sitiArray = array('badurl.com', 'site2.it');

    $messaggio = <<<MESSAGE
    Ciao htt p://ww w.dominio.com Mondo!
    Ciao htt p://ww w.dominio.com Mondo!
    Ciao htt p://ww w.badurl.com Mondo!
    Ciao htt p://ww w.dominio.com Mondo!
    Ciao ww w.dominio.com Mondo!
    Ciao htt p://dominio.com Mondo!
    MESSAGE;

    $messaggio = str_replace($sitiArray, $rplKey, $messaggio);
    $messaggio = str_replace($removeUrlPrefix, $rplKey, $messaggio);

    $pattern = "/(?i)\b((?:https?://|www\d{0,3}[.]|[a-z0-9.-]+[.][a-z]{2,4}/)(?:[^\s()<>]+|(([^\s()<>]+|(([^\s()<>]+)))))+(?:(([^\s()<>]+|(([^\s()<>]+))))|[^\s`!()[]{};:'".,<>?«»“”‘’]))/";

    $messaggio = preg_replace($pattern, '<a class="caratteretext" href="$1" target="_blank">$1</a>', $messaggio);

    echo $messaggio;
    [/PHP]

    In questa particolare situazione, il controllo dell'url non serve perché io nell'array inserisco dei siti, poi quando l'utente inserisce nel form l'esatto sito che ho nell'array, il mio codice deve trasformarlo in [GOOD]


  • Questa è la versione funzionale, riconosce correttamente se un sito è contenuto nell'array e lo trasforma in [GOOD], se invece non lo trova nell'array lo stampa linkabile, l'unico problema da risolvere è che nel campo deve essere scritto esattamente come nell'array (ma l'utente ovviamente ci mette anche il prefisso)

    [PHP]

    $sitiArray = array ("sito.it");
    $replacements3 = "<span class="badWord">[GOOD]</span>";

    ...

       $messaggio = $riga['messaggio'];
       $messaggio = str_ireplace($sitiArray, $replacements3, $messaggio);              
       echo "<span class=\"carattereMess\">".$messaggio."</span>";[/PHP]