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

    Sostituire valore nella querystring

    Ho bisogno di un aiuto con le regular expression.

    Ho una stringa con un link (http://www.sito.it?parametro1=valore...metro3=valore3)

    Come posso fare a sostituire il valore con un altro? (conoscendo il nome del parametro ovviamente)

    Io sono totalmente incapace con le RE, e qua mi sa che è difficile visto che il parametro potrebbe essere il primo o l'ultimo della querystring, oppure al centro.

    Sapete aiutarmi?

  2. #2
    Utente di HTML.it L'avatar di willybit
    Registrato dal
    May 2001
    Messaggi
    4,367
    se si tratta di sostituire un parametro che c'è già ti basta un replace
    ti faccio un esempio per sostituire parametro1 col valore NuovoValore1
    codice:
    set objRE=Server.CreateObject("VBScript.RegExp")
    objRE.Pattern="((\?|&)parametro1=).*?(&|$)"
    url = "http://www.sito.it/?parametro1=valore&parametro2=valore2&parametro3=valore3"
    Response.Write Server.HTMLEncode(objRE.Replace(url,"$1NuovoValore1$3"))
    però se vuoi mettere il parametro in querystring indipendentemente dal fatto che il parametro sia già presente o meno ti conviene fare una funzioncina
    tipo così
    codice:
    function ParametroQueryString(strurl,nomeParametro,valoreParametro)
    	arrTemp=Split(strurl,"?")
    	if UBound(arrTemp)=1 then
    		set re=Server.CreateObject("VBScript.RegExp")
    		re.Pattern="((^|&)" & nomeParametro & "=).*?(&|$)"
    		re.Global=true
    		re.IgnoreCase=true
    		if re.Test(arrTemp(1)) then
    			ParametroQueryString=arrTemp(0) & "?" & re.Replace(arrTemp(1),"$1" & valoreParametro & "$3")
    		else
    			ParametroQueryString=arrTemp(0) & "?" & arrTemp(1) & "&" & nomeParametro & "=" & valoreParametro
    		end if		
    	else
    		ParametroQueryString=strurl & "?" & nomeParametro & "=" & valoreParametro
    	end if
    end function
    
    url = "http://www.sito.it/?parametro1=valore&parametro2=valore2&parametro3=valore3"
    Response.Write Server.HTMLEncode(url) & "
    
    
    " 
    Response.Write Server.HTMLEncode(ParametroQueryString(url,"parametro1","valore1cambiato")) & "
    
    
    " 
    Response.Write Server.HTMLEncode(ParametroQueryString(url,"parametro2","valore2cambiato")) & "
    
    
    " 
    Response.Write Server.HTMLEncode(ParametroQueryString(url,"parametro3","valore3cambiato")) & "
    
    
    " 
    Response.Write Server.HTMLEncode(ParametroQueryString(url,"parametroNuvo","valoreNuovo")) & "
    
    
    <hr>"

  3. #3
    Letteralmente spettacolare! VVoVe:

    E' veramente perfetta!

    Ti chiedo un altro favorino.... visto che non riesco a capirla tutta mi potresti spiegare come funge questa RegEx, e cosa hai fatto nella Replace?

    Così magari imparo qualcosa

    Grazie mille sei un grande!!

  4. #4
    Utente di HTML.it L'avatar di willybit
    Registrato dal
    May 2001
    Messaggi
    4,367
    allora... ti spiego questa
    codice:
    ((\?|&)parametro1=).*?(&|$)
    noi cerchiamo
    parametro1=qualcosa
    e dobbiamo trasformarlo in
    parametro1=qualcosaltro
    quindi cerchiamo la parte fissa parametro1=
    prima di questo può esserci il punto di domanda o la e commerciale quindi (\?|&)
    dopo quello che cerchiamo può esserci la e commerciale o la fine della stringa quindi (&|$)
    in mezzo c'è qualunque cosa tranne il ritorno a capo .*? (fino a quando troviamo (&|$))
    nelle regular expression quello che cerchi tra parentesi viene memorizzato in ordine con $1, $2, $3, ecc..
    in questo caso abbiamo
    $1 = ((\?|&)parametro1=)
    che contiene anche
    $2 = (\?|&)
    e alla fine
    $3= (&|$)
    così nel replace possiamo fare
    codice:
    nuovovalore = objRE.Replace(url,"$1qualcosaltro$3")
    la RE nella funzione è leggermente diversa visto che la stringa che analizzo è solo l'eventuale parte in querystring, quindi può iniziare con la e commerciale o con inizio stringa (^|&)
    spero di essere riuscito a spiegare

  5. #5
    Perfetto!
    Chiarissimo e molto utile.

    Grazie ancora!

  6. #6
    io mi memorizzo la funzioncina va
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

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.