Vous pouvez utiliser cette fonction personnalisée ... show test rapide que la chaîne que vous avez donné à l'origine dans la question, il retourne la sortie désirée qui est deux éléments, l'un avec la clé sub
et la valeur fs&&&FASh*5
et une autre avec clé workarea
et la valeur London+&Home+Counties+Ltd
.
public Dictionary<string, string> ParseQueryString(string qs)
{
Dictionary<string, string> items = new Dictionary<string, string>();
string valueBuffer = string.Empty;
string keyBuffer = string.Empty;
bool lookingForValue = true;
for (int i = qs.Length - 1; i >= 0; i--)
{
char curChar = qs[i];
if (curChar.Equals('='))
{
lookingForValue = false;
keyBuffer = string.Empty;
}
else if (curChar.Equals('&') && !lookingForValue)
{
items.Add(keyBuffer, valueBuffer);
valueBuffer = string.Empty;
lookingForValue = true;
}
else if (curChar.Equals('?'))
{
if (keyBuffer.Length > 0)
items.Add(keyBuffer, valueBuffer);
break;
}
else
{
if (lookingForValue)
valueBuffer = curChar + valueBuffer;
else
keyBuffer = curChar + keyBuffer;
}
}
return items;
}
Comme je l'ai dit dans le commentaire, si elle est utilisée pour une utilisation réelle querystring Server.URLEncode
pour coder chaque valeur.
explication rapide: au lieu d'analyser la chaîne de requête selon &
qui ne peut être fait, il cherche =
caractères, une fois trouvé commencer à chercher &
qui apparaissent avant.
Il suffit d'utiliser 'Server.URLEncode' pour coder chaque valeur .. –
Thats ce que je suis cherche à faire - mais je dois d'abord séparer ces valeurs –
'ParseQueryString' est la meilleure option. '? name = black & white' est valide, mais ne veut pas dire ce que vous voulez dire. De plus, '+ 'pour les espaces sont grossièrement obsolètes. Où avez-vous trouvé cette chaîne? – Kobi