Para explicar a diferença entre esses dois, deixe-me explicar a diferença entre encodeURI
e encodeURIComponent
.
A principal diferença é que:
- A
encodeURI
função deve ser usada no URI completo.
- A
encodeURIComponent
função deve ser usada em .. bem .. componentes URI que são qualquer parte que se encontra entre separadores (; /?: @ & = + $, #).
Portanto, encodeURIComponent
esses separadores também são codificados porque são considerados como texto e não como caracteres especiais.
Agora, voltando à diferença entre as funções de decodificação, cada função decodifica seqüências de caracteres geradas por sua contraparte de codificação correspondente, cuidando da semântica dos caracteres especiais e seu tratamento.
decodeURIComponent("%C3%A9") == "é"; unescape("%C3%A9") == "é";
encodeURIComponent / decodeURIComponent () é quase sempre o par que você deseja usar, para concatenar e dividir seqüências de texto em partes de URI.
encodeURI em menos comum e com um nome enganador: deve realmente ser chamado fixBrokenURI. Ele pega algo que é quase um URI, mas possui caracteres inválidos, como espaços, e o transforma em um URI real. Ele tem um uso válido na correção de URIs inválidos da entrada do usuário e também pode ser usado para transformar um IRI (URI com caracteres Unicode nus) em um URI simples (usando UTF-8 com% de escape para codificar o não ASCII )
decodeURI decodifica os mesmos caracteres que decodeURIComponent, com exceção de alguns caracteres especiais. Ele é fornecido para ser um inverso do encodeURI, mas você ainda não pode contar com ele para retornar o mesmo que originalmente colocou - veja, por exemplo.
decodeURI(encodeURI('%20 '));
.Onde encodeURI deveria realmente ser chamado fixBrokenURI (), decodeURI () poderia igualmente ser chamado potencialmenteBreakMyPreviouslyWorkingURI (). Não consigo pensar em nenhum uso válido para isso em nenhum lugar; evitar.
fonte
Parece que
encodeURI
produz um URI "seguro" codificando espaços e outros caracteres (por exemplo, não imprimíveis), enquantoencodeURIComponent
codifica adicionalmente os dois pontos e os caracteres de barra e mais, e deve ser usado em cadeias de caracteres de consulta. A codificação de + e? e & é de particular importância aqui, pois esses são caracteres especiais nas cadeias de consulta.fonte
Como eu tinha a mesma pergunta, mas não encontrei a resposta aqui, fiz alguns testes para descobrir qual é realmente a diferença. Fiz isso, pois preciso da codificação para algo que não esteja relacionado a URL / URI.
encodeURIComponent("A")
retorna "A", não codifica "A" para "% 41"decodeURIComponent("%41")
retorna "A".encodeURI("A")
retorna "A", não codifica "A" para "% 41"decodeURI("%41")
retorna "A".-Isso significa que ambos podem decodificar caracteres alfanuméricos, mesmo que não os tenham codificado. Contudo...
encodeURIComponent("&")
retorna "% 26".decodeURIComponent("%26")
retorna "&".encodeURI("&")
retorna "&".decodeURI("%26")
retorna "% 26".Mesmo que encodeURIComponent não codifique todos os caracteres, decodeURIComponent pode decodificar qualquer valor entre% 00 e% 7F.
Nota: Parece que se você tentar decodificar um valor acima de% 7F (a menos que seja um valor unicode), seu script falhará com um "erro de URI".
fonte
decodeURIComponent()
edecodeURI()
são o oposto do acimafonte
decodeURIComponent decodificará marcadores especiais de URI, como &,?, #, etc, decodeURI não.
fonte
encodeURIComponent Not Escaped:
encodeURI () sem escape:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURI
fonte