2008-12-04 17 views
9

Esto debería ser fácil, pero no estoy seguro de cómo hacerlo. Tengo una aplicación WinForms que permite al usuario escribir largas descripciones. Occaisionalmente, escribirían URL, y RichTextBox los reconocería y haría que se pueda hacer clic en ellos cuando se muestren.Reconocer URL en texto sin formato

Me estoy moviendo la aplicación a la web, y no estoy seguro de cómo hacer esas mismas direcciones URL se puede hacer clic. ¿Hay alguna forma semiautomática de convertir "http://www.google.com" o "www.google.com" a enlaces clicables? ¿Tengo que recurrir a la coincidencia RegEx?

Respuesta

13

En realidad es un problema muy difícil. Puedes acercarte, pero no ser perfecto, con expresiones regulares. Hay una muy buena distribución de los patrones de expresiones regulares potenciales a considerar aquí: http://www.regexguru.com/2008/11/detecting-urls-in-a-block-of-text/

La última que enumera parece que es probablemente lo suficientemente bueno para la mayoría de propósitos:

\b(?:(?:https?|ftp|file)://|www\.|ftp\.) 
    (?:\([-A-Z0-9+&@#/%=~_|$?!:,.]*\)|[-A-Z0-9+&@#/%=~_|$?!:,.])* 
    (?:\([-A-Z0-9+&@#/%=~_|$?!:,.]*\)|[A-Z0-9+&@#/%=~_|$]) 
3

cuidado. Si las URL clicables que generan sus usuarios son visibles para otros usuarios, presentará nuevos problemas con ataques de secuencias de comandos entre sitios y cosas por el estilo. Además, es posible que deba desinfectar las URL. Por ejemplo, puede haber un signo en la URL, pero deberá escapar de ella.

Así que, en realidad hay dos pasos. 1. Encuentra la url. 2. Haz que la URL se pueda hacer clic.

Paso 2 es probablemente más difícil.

Además, tenga cuidado de cosas como paréntesis y tal. Algunos usuarios utilizan felizmente sus URL en una oración que luego terminan en un período. P.ej. Me gusta http://www.pie.com.It es bueno. Una de las mejores formas de resolver este problema es simplemente generar la URL a medida que el usuario escribe. Si algo sale mal, podrán contarlo antes de enviarlo.

+0

Afortunadamente esto es sólo para los datos de referencia internos, por lo que los ataques no son un gran problema. Las URL ya están en el texto, por lo que abordarlas a medida que se ingresan no es una opción (aunque hubiera sido una buena alternativa). – gfrizzle

Cuestiones relacionadas