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

Alan McCollough Alan McCollough added
getSecondsFromTime
8 day(s) ago

Michael Muller Michael Muller added
webmasterEmail
13 day(s) ago

Nick Maloney Nick Maloney added
friendlyURL
15 day(s) ago

Rachel Maxim Rachel Maxim added
delimitInterCap
15 day(s) ago

Raymond Camden Raymond Camden added
stripHTML
15 day(s) ago

Created by Raymond Camden / Design by Justin Johnson