2010-08-11 9 views
5

Cuando el usuario ingresa un correo electrónico en mi sitio web, le envío un e-mail de verificación de correo electrónico que contiene un enlace. Enlace ve algo como:Escape + (más) en URI

http://mysite.com/[email protected]&token=12341234

correo electrónico de este usuario en particular contiene '+' (más), de modo de enlace se parece a:

http://mysite.com/[email protected]&token=12341234

cuando se hace clic en el enlace (por lo menos en Firefox) plus se reemplaza con un espacio.

Pregunta: Qué función de codificación URL uso en .net para escapar del más.

Nota: Uri.EscapeUriString(email) deja intacto.

Respuesta

12

Se puede utilizar en lugar Uri.EscapeDataString - Sólo he verificado que la que convierte "Foo + Bar" en "% 2BBar Foo".

Para ser honesto, agradecería que MS proporcionara un poco más de orientación sobre la diferencia entre estos métodos, así como HttpUtility.UrlEncode (que no está disponible en todas las plataformas).

2

puede probar con el método UrlEncode:

string encodedEmail = HttpUtility.UrlEncode(email); 
0

Lo mejor que puede hacer es codificar o encriptar la dirección de correo electrónico, o "incluirla" en su token.

De esa manera, su enlace puede verse como: http://mysite.com/VerifyEmail?token=12341234480348204023

O: http://mysite.com/VerifyEmail?emailcode=A124E4F325O425FE5F4J6636K66L&token=12341234

Si sigue la ruta de hash, recordar que también utiliza la base 64 + como un carácter válido cuando se codifica. La práctica común es reemplazarlo por un @ o alguna otra cosa:

var emailcode = Convert.ToBase64String(GetHashBytes(email)).Replace('+', '@'); 

Entonces, cuando se realiza la confirmación:

var emailcodebytes = Convert.FromBase64String(Request["code"].Replace('@', '+')); 
+1

creo que el ejemplo de código es un poco mal? El primer ')' está en el lugar equivocado: 'var emailcodebytes = Convert.FromBase64String (Request [" code "]. Replace ('@', '+'));' – rtpHarry

+0

Gracias, @rptHarry, he reparado el ejemplo. –