FILTER_VALIDATE_URL returns false when underscore present in URL
Nadie ha tomado este issue todavía.
- Lenguaje dominante
- C
- Estrellas
- 40.4k
- Forks
- 8.2k
- Merge medio
- 2 d 13 h
- PR fusionados (30 d)
- 96
Descripción
Description
The following code:
<?php
var_dump(filter_var('https://sub_domain.example.com', FILTER_VALIDATE_URL));
var_dump(filter_var('https://ex_ample.com', FILTER_VALIDATE_URL));
Resulted in this output:
bool(false)
bool(false)
But I expected this output instead:
string(30) "https://sub_domain.example.com"
string(20) "https://ex_ample.com"
The underscore is a valid character according to the RFC 2396 section 2.3:
Unreserved Characters
Data characters that are allowed in a URI but do not have a reserved
purpose are called unreserved. These include upper and lower case
letters, decimal digits, and a limited set of punctuation marks and
symbols.unreserved = alphanum | mark mark = "-" | "_" | "." | "!" | "~" | "*" | "'" | "(" | ")"Unreserved characters can be escaped without changing the semantics
of the URI, but this should not be done unless the URI is being used
in a context that does not allow the unescaped character to appear.
But this filter fails if a underscore is present in the domain or subdomain portion of the URL.
This RFC is superseded by RFC 3986, but the underscore is still in the unreserved characters:
unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
PHP Version
PHP 8.4.4
Operating System
No response
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Línea de trabajo
Comienza reproduciendo las llamadas a filter_var() con FILTER_VALIDATE_URL mostradas en el issue y, a continuación, sigue la implementación de la validación de URL en php-src. Compara el tratamiento de los guiones bajos en los componentes de host y subdominio con las secciones de RFC citadas. Se considera terminado cuando los ejemplos documentados producen los resultados de validación esperados y las pruebas pertinentes cubren este comportamiento.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- c, php
- Área
- backend
- Tipo de issue
- Error
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Estado de actividad
- Estancado
- Claridad
- Bastante claro
- Aptitud para principiantes
- 42/100