Ao trabalhar com diferentes codificações de caracteres no PHP e no Laravel, você pode encontrar erros na conversão do charset como o seguinte: iconv(): Wrong charset, conversion from 'UTF7-IMAP' to 'UTF-8//IGNORE' is not allowed

Este erro ocorre ao tentar usar a função iconv() para converter uma string do charset ‘UTF7-IMAP’ para o charset ‘UTF-8//IGNORE’. Neste artigo, exploraremos as possíveis causas desse erro e forneceremos soluções para corrigi-o.

Causas do erro iconv(): Wrong charset, conversion from UTF7-IMAP to UTF-8//IGNORE is not allowed

Pode haver alguns motivos possíveis para este erro:

  1. Extensão PHP iconv ausente ou desatualizada: A extensão PHP iconv pode não estar instalada ou ativada no seu sistema, ou pode estar desatualizada. Verifique se a extensão está instalada, ativada e atualizada.
  2. CHARSET não suportado: O charset ‘UTF7-IMAP’ pode não ser suportado pela implementação do iconv do seu sistema. Sistemas diferentes podem ter suporte a codificação de caracteres diferentes em suas bibliotecas iconv.

Soluções para corrigir o erro iconv(): Wrong charset, conversion from UTF7-IMAP to UTF-8//IGNORE is not allowed

Instale ou habilite a extensão PHP iconv

Para instalar ou ativar a extensão iconv, siga estas etapas:

a. Se você não tiver a extensão iconv do php instalada, instale-a usando o gerenciador de pacotes. Por exemplo, nos sistemas Ubuntu/Debian/Mint, você pode executar:

sudo apt-get install php-iconv

b. Se você estiver usando várias versões PHP, precisará especificar a versão do PHP para a qual deseja instalar a extensão. Por exemplo, para instalar a extensão iconv do Php 7.4, execute:

sudo apt-get install php7.4-iconv

c. Se a extensão estiver instalada, mas desativada, você poderá ativá-la atualizando o arquivo de configuração php.ini. Encontre e descomente (remova a vírgula) a linha:

;extension=iconv

Reinicie seu servidor da web depois de fazer alterações no arquivo php.ini.

Use uma função alternativa para conversão de charset:

Se a função iconv() não suportar o charset ‘UTF7-IMAP’, você poderá tentar usar a função mb_convert_encoding() da extensão php mbstring:

$input = "Your UTF7-IMAP encoded string";
$output = mb_convert_encoding($input, "UTF-8", "UTF7-IMAP");

Se você não tiver a extensão do php mbstring instalada, pode instala-la usando o gerenciador de pacotes.Por exemplo, nos sistemas Ubuntu/Mint/Debian, você pode executar:

sudo apt-get install php-mbstring

Lembre-se de reiniciar seu servidor da web após a instalação da extensão.

Seguindo estas etapas, você poderá corrigir o erro e converter com sucesso sua string do charset ‘UTF7-IMAP’ para o charset ‘utf-8//ignore’.

Instalação de extensões php iconv e mbstring no Windows, Linux Ubuntu e Mint, macOS

Agora, vamos ver como instalar as extensões php necessárias em vários sistemas e ambientes operacionais.

Instalando o ICONV e MBSTRING nos Linux baseados em Debian

Instalando extensões php iconv e mbstring nos Linux: Ubuntu/Debian/Mint

Instale as extensões de iconv e mbstring:

sudo apt-get install php-iconv php-mbstring

Se estiver usando várias versões PHP, especifique a versão desejada:

sudo apt-get install php7.4-iconv php7.4-mbstring

Instalando o ICONV e MBSTRING no CentOS

Linux: CentOS

Instale as extensões de iconv e mbstring:

sudo yum install php-iconv php-mbstring

Se estiver usando várias versões PHP, especifique a versão desejada:

sudo yum install php74-iconv php74-mbstring

Instalando o ICONV e MBSTRING no macOS

Mac OS

Se estiver usando homebrew, você pode instalar as extensões com o seguinte comando:

brew install php-iconv php-mbstring

Se estiver usando várias versões PHP, especifique a versão desejada:

Instalando o ICONV e MBSTRING no Windows XAMPP

Windows: XAMPP

  • Abra o arquivo php.ini localizado no diretório xampp\php.
  • Encontre e retire os comentários das seguintes linhas removendo o ponto e vírgula:
;extension=iconv
;extension=mbstring
  • Salve o arquivo php.ini e reinicie o servidor Apache.

Instalando o ICONV e MBSTRING no Windows WampServer

Windows: WampServer

  • Abra o arquivo php.ini localizado no wamp\bin\php\php{versão} diretório (substitua {versão} pela sua versão php).
  • Encontre e retire o comentário das seguintes linhas removendo o ponto e vírgula:
;extension=iconv
;extension=mbstring

Salve o arquivo php.ini e reinicie o servidor Apache.

Considerações finais

Seguindo estas etapas, você poderá corrigir o erro e converter com sucesso sua string do charset ‘UTF7-IMAP’ para charset ‘UTF-8//IGNORE’. Compreender e abordar as causas subjacentes do erro pode ajudar você a garantir que seus aplicativos PHP e Laravel possam lidar com diferentes codificações de caracteres.