2012-08-29 18 views
5

Probé con cadenas e int que puedo imaginar, siempre que comience con http: //, será una URL válida usando FILTER_VALIDATE_URL. Entonces, ¿por qué necesitamos FILTER_VALIDATE_URL? ¿Por qué no simplemente agregar http: // en una entrada cada vez que queremos que sea válida?Cualquier cosa que comience con http: // es validada por FILTER_VALIDATE_URL?

var_dump(filter_var ('http://example',FILTER_VALIDATE_URL)); 
+0

muéstrenos lo que probó y cómo. –

+0

intente http: // 20, http: // ejemplo, son válidos – Jenny

+0

¿El código que utilizó para realizar la prueba es? –

Respuesta

10

Bueno, técnicamente, cualquier URI que comienza con un esquema (como http://) y contiene caracteres URI válido después de que es válida según la especificación oficial URI en RFC 3986:

comienza cada URI con un nombre de esquema, como se define en la Sección 3.1, que se refiere a una especificación para asignar identificadores dentro de ese esquema. Como tal, la sintaxis de URI es un sistema de nombres federado y extensible en el que la especificación de cada esquema puede restringir aún más la sintaxis y la semántica de los identificadores que usan ese esquema.

Así que no hay nada de extraño en el rendimiento que obtiene: eso es lo que se supone que debe suceder. En cuanto a por qué debería usar el filter_var con el indicador FILTER_VALIDATE_URL ... es mucho más apropiado semánticamente que hacer algo como lo siguiente para cada posible esquema de URL, ¿no le parece?

if (strpos($url, 'http://') === 0 
    || strpos($url, 'ftp://') === 0 
    || strpos($url, 'telnet://') === 0 
) { 
    // it's a valid URL! 
} 
+0

Veo. Esperaba que el filtro valide si una URL incluye un dominio válido o no. Entonces, mi suposición es incorrecta. – Jenny

+1

@Jenny Si eso es lo que está buscando, después de realizar la llamada de filtro, simplemente pase el valor devuelto a ['parse_url'] (http://us.php.net/manual/en/function.parse-url. php) y puedes obtener una buena matriz asociativa que enumere las partes componentes del URI. – rdlowrey

+0

Gracias, intentaré eso. – Jenny

Cuestiones relacionadas