Corrigir caracteres de formulários PHP com UTF-8 e mbstring


Data de Publicação:

Atualizado:


Artigos > Corrigir caracteres de formulários PHP com UTF-8 e mbstring

status 2026 e uso seguro

Conclusão: mantenha uma codificação explícita — normalmente UTF-8 — em todo o formulário HTML, resposta HTTP, fonte PHP, manipulação de strings e conexão de banco de dados. Capture a entrada bruta e identifique o limite onde os bytes são decodificados incorretamente antes de alterar as configurações globais.

O que você aprenderá

  • Como distinguir um problema de exibição de conversão de entrada ou corrupção de banco de dados.
  • Quais cabeçalhos e configurações de PHP são relevantes para aplicativos UTF-8 modernos.
  • Por que as receitas herdadas mbstring.internal_encoding e mbstring.http_input abaixo não devem ser copiadas para uma implantação atual.

A quem se destina: mantenedores de PHP que solucionam problemas de mojibake após validação de formulário, redirecionamentos ou viagens de ida e volta ao banco de dados.

Atualização para 2026: PHP descontinuou as antigas diretivas de codificação iconv/mbstring no PHP 5.6 em favor de default_charset; o código moderno deve tornar a codificação explícita em cada limite. A configuração original é mantida apenas para explicar o incidente histórico.

Nota de segurança: os comandos e exemplos de configuração do artigo original não foram novamente executados num ambiente de produção atual. Antes de os aplicar, confirme as versões suportadas, as cópias de segurança, os controlos de acesso e o procedimento de reversão num ambiente de teste isolado.

Fontes primárias oficiais

Visão geral

O texto falsificado ocorreu quando se passou do ecrã de entrada para o ecrã de confirmação em PHP.

O texto é falsificado ao introduzir o texto no formulário e ao passar para o ecrã de confirmação.

O texto falsificado também ocorre durante a transição para o próprio ecrã devido a erros de verificação de entrada.

Como o servidor tinha acabado de ser construído, senti que faltava algo na configuração do PHP, por isso vou descrever o que descobri nessa altura.


Tabela de Conteúdos

  1. investigação (para determinar a causa de algo)
  2. resumo

1. investigação (para determinar a causa de algo)

As seguintes informações foram investigadas para investigar a causa do problema.

1-1. inquérito

Primeiro, verificar as definições de PHP (php.ini).

php.ini


default_charset = "UTF-8"
mbstring.internal_encoding = UTF-8
mbstring.encoding_translation = On

É como descrito acima e parece estar bem.

Então o problema parece ser causado pela fonte PHP.

No entanto, a fonte PHP não identificou o problema provável.

Mais uma vez, verifiquei o php.ini em busca de configurações suspeitas e encontrei uma configuração suspeita.

php.ini


mbstring.http_input = auto

Não ficou claro se foi codificado em UTF-8 porque foi colocado em automático, pelo que foi alterado como se segue para o experimentar.

php.ini


mbstring.http_input = UTF-8

Texto de má-fé resolvido com sucesso.

Esta configuração é necessária para o módulo mbstring quando se utilizam cordas multibyte, tais como as japonesas em PHP.

Configuração da codificação dos pedidos http recebidos.

2. resumo

Se ocorrer texto falsificado, primeiro tente organizar o fluxo de processamento.

E se experimentar caracteres falsificados ao utilizar PHP para fazer a transição do ecrã de entrada para o ecrã de confirmação ou outras transições de ecrã, suspeite das seguintes definições em php.ini.

A configuração padrão é 'auto', por isso verifique isto quando utilizar mbstring para processar cordas multibyte.

■INFORMATION

Artigos


■PROFILE

Perfil


■Contacto

Contacto