Avatar ·

Como codificar corretamente uma URL em JavaScript? encodeURI vs encodeURIComponent

Olá a todos! Sou novo em JavaScript e encontrei um problema ao trabalhar com URLs. Preciso enviar uma requisição para o servidor com parâmetros que contêm caracteres especiais e cirílico. Por exemplo, tenho uma string de busca: "кофе & чай / рецепты?".

Tentei usar encodeURI(), mas notei que alguns caracteres não são codificados. Depois encontrei encodeURIComponent(), mas agora não entendo qual método usar quando.

Aqui está um exemplo do meu código que não funciona como esperado:

const baseUrl = "https://api.example.com/search";
const query = "кофе & чай / рецепты?";
const fullUrl = baseUrl + "?q=" + encodeURI(query);
console.log(fullUrl);
// Resultado: https://api.example.com/search?q=%D0%BA%D0%BE%D1%84%D0%B5%20&%20%D1%87%D0%B0%D0%B9%20/%20%D1%80%D0%B5%D1%86%D0%B5%D0%BF