Tengo algunos requisitos que se cumplirían fácilmente usando el componente encodeURI directamente, pero la vida nunca es fácil, debido al funcionamiento particular del sistema de este cliente, necesitamos codificar las cosas que provienen de una base de datos en un formato de URL (por ejemplo, productos/ hogar+productos/) y convertirlo en un blob de almacenamiento que tiene que seguir el formato 'codificado' (productos%2Fhogar%2Bproductos%2F), sin embargo, tiene que estar en minúsculas (%2F -> %2F).
Sin embargo, el segundo se produce cuando el cliente también tiene páginas regionalizadas y deben permanecer en mayúsculas (por ejemplo, productos/GB/hogar+productos). Ese GB debe permanecer en mayúsculas, por lo que no puedo bombardear todo con .toLowerCase()
¿Alguna idea?
Puede usar una expresión regular para hacer coincidir los "bytes" codificados y convertirlos a minúsculas:
function encode(text) { const uriEncoded = encodeURIComponent(text); return uriEncoded.replace(/%\w\w/g, match => match.toLowerCase()); }Que produce:
> encode("products/GB/household+products") 'products%2fGB%2fhousehold%2bproducts' Puede ver que GB se conserva mientras que %2f y %2b están en minúsculas.
También es fácil de decodificar, usa el mismo enfoque pero primero tienes que convertirlo a mayúsculas y luego decodificar normalmente.