-1

重複
の可能性:URL変数を取り除く方法

私は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ます。
productidとrecordindexの新しい値で新しいURLを準備する必要があるたびに、「next」というリンクをクリックして製品の詳細を検索したいと思います。たとえば、countryid="3693"に関して4つの製品があります。

productid productname 
1           p1
2           p2
3           p3
4           p4

次に新しいURLをクリックすると、productid=1とrecordindex=1で準備し、もう一度クリックすると、URLはproductid=2とrecordid=2というようになります。

URLを取得するために、次のコードを使用しました。

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

現在のURLを教えてくれます

次に、以下のコードで新しいURLを準備します。

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

このコードでは、毎回古いURL値と新しい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&productid=2&recordindex=2

古いURLの古い&productid = 1111&recordindex = 1を削除する方法についての質問。replace関数を試してみましたが、文字列が一致すると置換されます。私の場合、productとrecordindexの値が変更されるたびに。正規表現を使用して古い文字列を削除する方法を教えてください。助けて。

ありがとう

4

1 に答える 1

2

これには正規表現は必要ありません。実際、誰かがすでにこのためのUDFを構築しています。

QueryStringDeleteVar

例:

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

UDFコード:

<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>

ただし、URLパラメータ値を置き換えることを検討しているため、QueryStringChangeVarはおそらく必要なものになります。

<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>
于 2012-09-07T12:30:11.580 に答える