Search code examples
regexcoldfusion-8

how to remove string from URL?


Possible Duplicate:
How to strip out a url variable

I have url http://localhost/abc/detail.cfm?iId=1711471&countrysearch=3693&itemnumbersearch=&keywordsearch=&purl=%2FIGPCI%2Fthumbs%2Ecfm%3Fcountrysearch%3D3693%26itemnumbersearch%3D%26keywordsearch%3D%26x%3D78%26y%3D10&productid=1111&recordindex=1.
I want to search product details on clicking link called "next" each time i need to prepare new URL with new value of productid and recordindex.for example i have four product with respect to countryid="3693",

productid productname 
1           p1
2           p2
3           p3
4           p4

when next click new URL prepare with productid=1 and recordindex=1,again click then URL is productid=2 and record id =2 and so on.

for getting URL i have used following code:

 <cfset currentURL = "#CGI.SERVER_NAME#" & "#CGI.PATH_INFO#" & "#CGI.query_string#">

which give me the current url

then i prepare new url with below code:

<cfif queryString.recordset gt 0> <cfset recordindex=#recordindex#+1> <cfset newUrl=currentURL & '&productid=#queryString.poductid[recordindex]#&recordindex=#recordindex#' </cfif>

with this code that each time it's append url value with old with new one. like:

http://localhost/abc/detail.cfm?iId=1711471&countrysearch=3693&itemnumbersearch=&keywordsearch=&purl=%2FIGPCI%2Fthumbs%2Ecfm%3Fcountrysearch%3D3693%26itemnumbersearch%3D%26keywordsearch%3D%26x%3D78%26y%3D10&productid=1111&recordindex=1&productid=2&recordindex=2

my question how to remove old &productid=1111&recordindex=1 in old URL.i tried with replace function but it replace when string are match,in my case every time product and recordindex values are change.how to remove old string using regular expression.please help me.

Thanks


Solution

  • You don't need regex for this. In fact, someone has already built a UDF for this.

    QueryStringDeleteVar

    Example:

    <cfset currentURL = CGI.SERVER_NAME & CGI.PATH_INFO & queryStringDeleteVar("productid,recordindex")>
    

    UDF code:

    <cfscript>
    /**
     * Deletes a var from a query string.
     * Idea for multiple args from Michael Stephenson (michael.stephenson@adtran.com)
     * 
     * @param variable      A variable, or a list of variables, to delete from the query string. 
     * @param qs      Query string to modify. Defaults to CGI.QUERY_STRING. 
     * @return Returns a string. 
     * @author Nathan Dintenfass (michael.stephenson@adtran.comnathan@changemedia.com) 
     * @version 1.1, February 24, 2002 
     */
    function queryStringDeleteVar(variable){
        //var to hold the final string
        var string = "";
        //vars for use in the loop, so we don't have to evaluate lists and arrays more than once
        var ii = 1;
        var thisVar = "";
        var thisIndex = "";
        var array = "";
        //if there is a second argument, use that as the query string, otherwise default to cgi.query_string
        var qs = cgi.query_string;
        if(arrayLen(arguments) GT 1)
            qs = arguments[2];
        //put the query string into an array for easier looping
        array = listToArray(qs,"&");        
        //now, loop over the array and rebuild the string
        for(ii = 1; ii lte arrayLen(array); ii = ii + 1){
            thisIndex = array[ii];
            thisVar = listFirst(thisIndex,"=");
            //if this is the var, edit it to the value, otherwise, just append
            if(not listFind(variable,thisVar))
                string = listAppend(string,thisIndex,"&");
        }
        //return the string
        return string;
    }
    </cfscript>
    

    Although, since you're looking to replace URL parameter values, QueryStringChangeVar would probably be more of what you want.

    <cfscript>
    /**
     * Changes a var in a query string.
     * 
     * @param name      The name of the name/value pair you want to modify. (Required)
     * @param value      The new value for the name/value pair you want to modify. (Required)
     * @param qs      Query string to modify. Defaults to CGI.QUERY_STRING. (Optional)
     * @return Returns a string. 
     * @author Nathan Dintenfass (nathan@changemedia.com) 
     * @version 2, September 5, 2002 
     */
    function QueryStringChangeVar(variable,value){
        //var to hold the final string
        var string = "";
        //vars for use in the loop, so we don't have to evaluate lists and arrays more than once
        var ii = 1;
        var thisVar = "";
        var thisIndex = "";
        var array = "";
        var changedIt = 0;
        //if there is a third argument, use that as the query string, otherwise default to cgi.query_string
        var qs = cgi.query_string;
        if(arrayLen(arguments) GT 2)
            qs = arguments[3];
    
        //put the query string into an array for easier looping
        array = listToArray(qs,"&");
        //now, loop over the array and rebuild the string
        for(ii = 1; ii lte arrayLen(array); ii = ii + 1){
            thisIndex = array[ii];
            thisVar = listFirst(thisIndex,"=");
            //if this is the var, edit it to the value, otherwise, just append
            if(thisVar is variable){
                string = listAppend(string,thisVar & "=" & value,"&");
                changedIt = 1;
            }
            else{
                string = listAppend(string,thisIndex,"&");
            }
        }
        //if it was not changed, add it!
        if(NOT changedIt)
            string = listAppend(string,variable & "=" & value,"&");
        //return the string
        return string;
    }
    </cfscript>