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

    ricavare url in testo semplice

    Salve a tutti
    Esistono funzioni per verificare se nel testo liberamente inserito dall'utente vi sono degli url, in modo da trasformarli nel corretto codice html tale da renderli clickabili?
    Non vorrei impiegare una giornata per inventare di nuovo la ruota...
    grazie!

  2. #2

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    867
    Mi sa che devi fartiil replace con una bella espressione regolare e se non sbaglio su questo forum se ne è già parlato più di una volta, prova a fare una bella ricerca.

    No pvt per sollecitare risposte, grazie.

  4. #4
    Primo risultato basic search di Google per validate url php regexp:
    http://www.google.it/search?q=valida...la:it:official

    Questa funzione valida un URL il cui protocollo sia HTTP o FTP, scritto nella forma corretta http://www.domainname.com oppure di 2° livello http://domainname.com , solo per estensioni com, net e org.


    Codice PHP:
    <?php
    function isValidDomain($domainName) {
        return 
    ereg("^(http|ftp)://(www\.)?.+\.(com|net|org)$"$domainName);
    }

    echo 
    isValidDomain("http://www.somesite.com"); //true

    echo isValidDomain("ftp://somesite.com"); //true

    echo isValidDomain("ftp://www.somesite.fr"); //false

    echo isValidDomain("www.somesite.com"); //false
    ?>
    http://www.interspire.com/content/ar...ar-Expressions
    Emanuele DG
    <?php echo "Proverbio zen(d): vivi ogni giorno come se fosse il ".date('d M Y', time()); ?>
    Intellectual property

  5. #5
    Grazie delle risposte.
    Il fatto e' che non devo solo validare gli indirizzi, ma riconoscere gli url in mezzo a del testo generico, e gli url possono essere anche piu' di uno!

  6. #6
    Certo, questa è solo una possibilità per la validazione.
    Per trovare una stringa che abbia determinate caratteristice all'interno di un'altra stringa ti suggerisco la funzione preg_match()

    http://it2.php.net/manual/it/function.preg-match.php

    E questo per le RegEx:
    http://weblogtoolscollection.com/regex/regex.php

    è vero che si trova poco sulle RegExp come tutorial completo, nel web.
    Emanuele DG
    <?php echo "Proverbio zen(d): vivi ogni giorno come se fosse il ".date('d M Y', time()); ?>
    Intellectual property

  7. #7
    Tante grazie, mi metto al lavoro e nel caso mi rifaccio sentire ;-)

  8. #8
    stesso problema..... scusa la franchezza della domanda, ma hai qualche news? grazie

  9. #9
    Su php.net (alla voce preg_replace del manuale) è stata postata una soluzione dall'utente marten_berglund at hotmail dot com (la funzione linkify), eccola applicata in un esempio:

    Codice PHP:
    function linkify($text) {
        
    $strip_lchrs "[^\s\(\)\[\]\{\}\.\,\;\:\?\!]";      //Not these chars in beginning
        
    $strip_rchrs "[^\s\(\)\[\]\{\}\.\,\;\:\?\!\d]";    //Not these chars in end

        
    $prot_pat $strip_lchrs "[\S]*\:\/\/[\S]*\.[\S]*" $strip_rchrs;  //abc://de.fg
        
    $email_pat $strip_lchrs "[\S]*@[\S]*\.[\S]*" $strip_rchrs;      //abc@de.fg
        
    $general_pat $strip_lchrs "[\S]*\.[\S]*" $strip_rchrs;          //abc.de

        
    $preg_pattern "/(" $prot_pat "|" $email_pat "|" $general_pat ")/ei";
        
    $preg_replace "check_preg('$1')";
        return 
    preg_replace($preg_pattern$preg_replace$text);
    }

    function 
    check_preg($subpat) {
        
    //These abbr. should not be linked
        
    $exc_string "/e\.g|i\.e|et\.c/i";
        
    //If it says abc://de.fg
        
    if (preg_match("/[\S]*\:\/\/[\S]*\.[\S]*/i"$subpat) == 1) {
            return 
    "[url='" $subpat "']" $subpat "[/url]";
        }
        
    //If it says [email]abc@de.fg[/email]
        
    else if (preg_match("/[\S]*@[\S]*\.[\S]*/i"$subpat) == 1) {
            return 
    "[email='" $subpat "']" $subpat "[/email]";
        }
        
    //If it says "e.g." don't link
        
    else if (preg_match($exc_string$subpat) == 1) {
            return 
    $subpat;
        }
        
    //If it says abc.de
        
    else
            return 
    "[url='http://" $subpat "']" $subpat "[/url]";
    }



    $testo "Scrivi in questa stringa plain text, url e mail addresses";
    echo 
    linkify($string); 
    Emanuele DG
    <?php echo "Proverbio zen(d): vivi ogni giorno come se fosse il ".date('d M Y', time()); ?>
    Intellectual property

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.