URL Encode
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.
Código
// URL encoding, decoding, and query string building
import "std/url"
fn main() -> int {
let raw: String = "hello world & foo=bar"
let encoded: String = url_encode(raw)
print("encoded: " + encoded)
let decoded: String = url_decode(encoded)
print("decoded: " + decoded)
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)
let html: String = html_escape("<script>alert('xss')</script>")
print("escaped: " + html)
return 0
}
Salida
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>
Explicación
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.