Non, allow_blank permet juste d'accepter une valeur vide, ce n'est pas passé à URI::regexp. Ça valide juste parce que la regexp n'est pas ancrée. Tu peux mettre n'importe quoi et ça passe, tant que y'a une URL quelque part.
Pour rendre l'URL valide au sens de la RFC 3986 il faudrait donc encoder le #:
irb(main):003:0> u = URI.parse("https://matrix.to/#/%23copie-publique:codelutin.com")
=> #<URI::HTTPS https://matrix.to/#/%23copie-publique:codelutin.com>
Par ailleurs, python accepte l'URL telle quelle, avec les 2 # (j'imagine que c'est une déviation de la RFC qui est assez courante et elle ne cause pas d'ambiguité en soi):
[^] # Re: Fragment
Posté par nud . En réponse à l’entrée du suivi Impossible de mettre un lien vers un salon matrix dans les liens d'une dépêche. Évalué à 3 (+0/-0).
Non,
allow_blankpermet juste d'accepter une valeur vide, ce n'est pas passé àURI::regexp. Ça valide juste parce que la regexp n'est pas ancrée. Tu peux mettre n'importe quoi et ça passe, tant que y'a une URL quelque part.C'est un bug qui mériterait d'être corrigé.
Par contre il est intéressant de constater que la RFC 3986 n'autorise pas de
#dans le fragment (ce qui implique que l'URL de l'OP est invalide):La regexp retournée par
URI.regexpest d'ailleurs correcte en ce sens:Pour rendre l'URL valide au sens de la RFC 3986 il faudrait donc encoder le
#:Par ailleurs, python accepte l'URL telle quelle, avec les 2
#(j'imagine que c'est une déviation de la RFC qui est assez courante et elle ne cause pas d'ambiguité en soi):