CFLib.org – Common Function Library Project

ActivateURL(string [, target] [, paragraph])

Last updated August 11, 2004
Download UDF

author

Joel Mueller                                      Joel Mueller

Version: 3 | Requires: ColdFusion 5 | Library: StrLib

Description:
This function takes URLs in a text string and turns them into links. The entire string will be returned with the additional <a href> tags

Return Values:
Returns a string.

Example:

<cfset inputString = "This is a string that has a URL in it, http://www.cflib.org/ so we want that URL to be a link">
<cfoutput>#ActivateURL(inputString)#</cfoutput>

Parameters:

Name Description Required
string Text to parse. Yes
target Optional target for links. Defaults to "". No
paragraph Optionally add paragraphFormat to returned string. No

Full UDF Source:

<cfscript>
/**
* This function takes URLs in a text string and turns them into links.
* Version 2 by Lucas Sherwood, lucas@thebitbucket.net.
* Version 3 Updated to allow for ;
*
* @param string      Text to parse. (Required)
* @param target      Optional target for links. Defaults to "". (Optional)
* @param paragraph      Optionally add paragraphFormat to returned string. (Optional)
* @return Returns a string.
* @author Joel Mueller (lucas@thebitbucket.netjmueller@swiftk.com)
* @version 3, August 11, 2004
*/

function ActivateURL(string) {
    var nextMatch = 1;
    var objMatch = "";
    var outstring = "";
    var thisURL = "";
    var thisLink = "";
    var    target = IIf(arrayLen(arguments) gte 2, "arguments[2]", DE(""));
    var paragraph = IIf(arrayLen(arguments) gte 3, "arguments[3]", DE("false"));
    
    do {
        objMatch = REFindNoCase("(((https?:|ftp:|gopher:)\/\/)|(www\.|ftp\.))[-[:alnum:]\?%,\.\/&##!;@:=\+~_]+[A-Za-z0-9\/]", string, nextMatch, true);
        if (objMatch.pos[1] GT nextMatch OR objMatch.pos[1] EQ nextMatch) {
            outString = outString & Mid(String, nextMatch, objMatch.pos[1] - nextMatch);
        } else {
            outString = outString & Mid(String, nextMatch, Len(string));
        }
        nextMatch = objMatch.pos[1] + objMatch.len[1];
        if (ArrayLen(objMatch.pos) GT 1) {
            // If the preceding character is an @, assume this is an e-mail address
            // (for addresses like admin@ftp.cdrom.com)
            if (Compare(Mid(String, Max(objMatch.pos[1] - 1, 1), 1), "@") NEQ 0) {
                thisURL = Mid(String, objMatch.pos[1], objMatch.len[1]);
                thisLink = "<A HREF=""";
                switch (LCase(Mid(String, objMatch.pos[2], objMatch.len[2]))) {
                    case "www.": {
                        thisLink = thisLink & "http://";
                        break;
                    }
                    case "
ftp.": {
                        thisLink = thisLink & "
ftp://";
                        break;
                    }
                }
                thisLink = thisLink & thisURL & """";
                if (Len(Target) GT 0) {
                    thisLink = thisLink & " TARGET=""" & Target & """";
                }
                thisLink = thisLink & ">" & thisURL & "</A>";
                outString = outString & thisLink;
                // String = Replace(String, thisURL, thisLink);
                // nextMatch = nextMatch + Len(thisURL);
            } else {
                outString = outString & Mid(String, objMatch.pos[1], objMatch.len[1]);
            }
        }
    } while (nextMatch GT 0);
        
    // Now turn e-mail addresses into mailto: links.
    outString = REReplace(outString, "([[:alnum:]_\.\-]+@([[:alnum:]_\.\-]+\.)+[[:alpha:]]{2,4})", "<A HREF=""mailto:\1"">\1</A>", "ALL");
        
    if (paragraph) {
        outString = ParagraphFormat(outString);
    }
    return outString;
}
</cfscript>

Search CFLib.org


Latest Additions

Jose Diaz-Salcedo Jose Diaz-Salcedo added
cfRssFeed
2 day(s) ago

Raymond Compton Raymond Compton added
structBlend
23 day(s) ago

Duncan Duncan added
IsZIPUK
23 day(s) ago

Todd Sharp Todd Sharp added
getTagContentAll
29 day(s) ago

Gerald Guido Gerald Guido added
ListReturnDuplicat...
1 month(s) ago

Created by Raymond Camden / Design by Justin Johnson