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ánta abstracción es demasiado?
- 4. Cuánto javascript es demasiado
- 5. ¿Cuánto de STL es demasiado?
- 6. PHP: scandir() es demasiado lento
- 7. memoria php cuánto es demasiado
- 8. ¿Cuándo es demasiado "acción lambda"?
- 9. espíritu Boost es demasiado codicioso
- 10. ¿Cuánto CSS es demasiado CSS?
- 11. ¿Cuánto JSON es demasiado JSON?
- 12. ¿Este código es demasiado frágil?
- 13. Modo estricto en PHP?
- 14. En ECMAScript5, ¿cuál es el alcance del "uso estricto"?
- 15. ¿Cuándo es seguro * para el alias de puntero estricto?
- 16. XHTML span estricto dentro de la etiqueta es semántica
- 17. ¿Qué es el "modo estricto" y cómo se usa?
- 18. ¿Es "uso estricto" seguro para sitios en vivo?
- 19. fmap estricto utilizando sólo Functor, no Mónada
- 20. figura de imshow() es demasiado pequeña
- 21. java.lang.InternalError: nombre es demasiado largo para representar
- 22. Mi archivo de registro es demasiado grande
- 23. ¿Cuándo es un CSS Sprite demasiado grande?
- 24. ¿Cuánta seguridad de hilo es demasiado?
- 25. ¿Cuándo es una clase demasiado larga?
- 26. Mi GUI de Tkinter es demasiado ... estática?
- 27. caso onbeforeunload es demasiado entusiasta en IE9
- 28. vba lookahead positivo es demasiado codicioso
- 29. ¿Es demasiado difícil un proyecto? ¿Qué haces?
- 30. Usar git sobre sshfs es demasiado lento
¡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! –