std/url provee percent-encoding para URLs (RFC 3986), construcción de query strings y escapado de entidades HTML. Esto es fundamental para construir clientes y servidores web que manejen la entrada del usuario de forma segura.
// URL encoding, decoding, and query string building // Codificación URL, decodificación y construcción de query strings import "std/url" fn main() -> int { // Percent-encode special characters let raw: String = "hello world & foo=bar" let encoded: String = url_encode(raw) print("encoded: " + encoded) // Decode back let decoded: String = url_decode(encoded) print("decoded: " + decoded) // Build a query string from key/value arrays let keys: Array = ["name", "lang", "version"] let vals: Array = ["Nyx Lang", "es", "0.12"] let qs: String = build_query_string(keys, vals) print("query: " + qs) // HTML escaping let html: String = html_escape("<script>alert('xss')</script>") print("escaped: " + html) return 0 }
encoded: hello%20world%20%26%20foo%3Dbar decoded: hello world & foo=bar query: name=Nyx%20Lang&lang=es&version=0.12 escaped: <script>alert('xss')</script>
Cómo funciona
url_encode codifica con percent-encoding todos los caracteres excepto los caracteres no reservados de RFC 3986 (A-Z, a-z, 0-9, -._~). Los espacios se convierten en %20, los ampersands en %26, etc. url_decode revierte el proceso y también decodifica + como espacio.
build_query_string toma arrays paralelos de claves y valores, codifica cada par y los une con &. Este es el formato estándar para parámetros de query en URLs y envíos de formularios HTML.
html_escape convierte los cinco caracteres sensibles de HTML (& < > " ') en sus equivalentes de entidad. Siempre hay que escapar la entrada del usuario antes de insertarla en HTML para prevenir ataques XSS.