En PHP, filter_var('www.example.com', FILTER_VALIDATE_URL)
devuelve false
. ¿Es esto correcto? ¿No es www.example.com
una URL válida, o los protocolos (http: //, ftp: //, etc.) deben declararse explícitamente en la URL para que sean formalmente correctos?¿FILTER_VALIDATE_URL es demasiado estricto?
Respuesta
No es una URL válida. Prefijo cosas con http://
nunca fue una cosa fácil de usar, por lo que los navegadores modernos suponen que quieres decir http si solo ingresas un nombre de dominio. ¡Las bibliotecas de software son, con razón, un poco más exigentes!
Un enfoque que podría tomar es pasar la cuerda a través de parse_url y agregar los elementos que falten, p.
if ($parts = parse_url($url)) {
if (!isset($parts["scheme"]))
{
$url = "http://$url";
}
}
Curiosamente, cuando se utiliza FILTER_VALIDATE_URL, en realidad se utiliza parse_url internamente para averiguar lo que el esquema es (view source). Gracias a salathe por detectar esto en los comentarios a continuación.
La URL debe corresponderse con las reglas establecidas en RFC 2396, y según esa especificación, el protocolo es necesario.
La parte del esquema ("protocolo") es necesaria para FILTER_VALIDATE_URL
.
Además de la respuesta de Paul Dixon, quiero decir que puede usar flags para FILTER_VALIDATE_URL
para especificar qué parte de la URL debe presentarse.
FILTER_FLAG_SCHEME_REQUIRED
FILTER_FLAG_HOST_REQUIRED
FILTER_FLAG_PATH_REQUIRED
FILTER_FLAG_QUERY_REQUIRED
a partir de PHP 5.2.1 FILTER_FLAG_SCHEME_REQUIRED
FILTER_FLAG_HOST_REQUIRED
y banderas utilizadas por defecto y, por desgracia, no hay manera de desactivar (que puede no hacer algo como filter_var($url, FILTER_VALIDATE_URL, ~FILTER_FLAG_SCHEME_REQUIRED);
si la existencia de la parte esquema de URL hace no necesariamente). Parece un error para mí. Hay un relativo bugreport.
Ojalá hubiera funcionado, pero no puedo hacerlo. –
Esto parece hacer que no valide ninguna URL. https://3v4l.org/1TjA5 – Derokorian
@RussellSilva, Derokorian Tienes razón, no puedo hacer que funcione. Parece un error para mí. Actualicé mi respuesta. –
- 1. gcc -Wshadow es demasiado estricto?
- 2. Cualquier cosa que comience con http: // es validada por FILTER_VALIDATE_URL?
- 3. Cuánto javascript es demasiado
- 4. ¿Cuánta abstracción es demasiado?
- 5. ¿Cuánto CSS es demasiado CSS?
- 6. ¿Cuándo es demasiado "acción lambda"?
- 7. ¿Este código es demasiado frágil?
- 8. ¿Cuánto de STL es demasiado?
- 9. PHP: scandir() es demasiado lento
- 10. ¿Cuánto JSON es demasiado JSON?
- 11. espíritu Boost es demasiado codicioso
- 12. memoria php cuánto es demasiado
- 13. Modo estricto en PHP?
- 14. ¿Qué es el "modo estricto" y cómo se usa?
- 15. En ECMAScript5, ¿cuál es el alcance del "uso estricto"?
- 16. ¿Cuándo es seguro * para el alias de puntero estricto?
- 17. ¿Es "uso estricto" seguro para sitios en vivo?
- 18. XHTML span estricto dentro de la etiqueta es semántica
- 19. fmap estricto utilizando sólo Functor, no Mónada
- 20. figura de imshow() es demasiado pequeña
- 21. Mi archivo de registro es demasiado grande
- 22. ¿Cuándo es un CSS Sprite demasiado grande?
- 23. caso onbeforeunload es demasiado entusiasta en IE9
- 24. (HTML 5) ¿Cuánto es demasiado almacenamiento local?
- 25. ¿Es demasiado difícil un proyecto? ¿Qué haces?
- 26. ¿Cuándo es una clase demasiado larga?
- 27. LayoutLib es demasiado reciente. Actualiza tu herramienta?
- 28. vba lookahead positivo es demasiado codicioso
- 29. Unir consultas y cuando es demasiado
- 30. ¿Cuánta seguridad de hilo es demasiado?
¡Gracias por la explicación! Usaré el enfoque 'parse_url' que dijiste, me gusta mejor que' filter_var' – federicot
Wednesday Trivia: 'FILTER_VALIDATE_URL' usa' parse_url() 'para verificar si hay un esquema. – salathe
¡Agradable! ¡Lo agregaré a la respuesta! –