¿El nodo decodeURIComponent es idempotente?
Lo hace...
decodeURIComponent(x) === decodeURIComponent(decodeURIComponent(x)) para todos y cada uno de los x ?
Si no, ¿hay alguna alternativa que sea idempotente? Estaba tratando de pensar si esto era posible yo mismo.
No
> encodeURIComponent('%') '%25' > encodeURIComponent(encodeURIComponent('%')) '%2525' > decodeURIComponent('%2525') '%25' > decodeURIComponent(decodeURIComponent('%2525')) '%' > decodeURIComponent('%2525') === decodeURIComponent(decodeURIComponent('%2525')) falseNo. Si la cadena se decodifica en una nueva secuencia que a su vez se puede interpretar como un componente de URI codificado, entonces se puede decodificar nuevamente en una cadena diferente:
const x = '%2521'; console.log(decodeURIComponent(x), decodeURIComponent(decodeURIComponent(x))); %2521 → %21 → !
Cualquier cadena dada está codificada en un formato específico o es texto sin formato . No puedes adivinar lo que se supone que es. %21 podría ser la cadena de texto sin formato "%21" o una cadena codificada en URL que represente "!". Necesita saber cuál se supone que es e interpretarlo en consecuencia. Eso generalmente se aplica a todos y cada uno de los formatos de codificación de texto.