Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Removendo o caractere de marcador unicode


Tantas coisas podem dar errado aqui, porque banco de dados, envios de formulários e literais de string de código-fonte estão todos envolvidos. Presumo que você queira usar UTF-8, porque com qualquer outra codificação típica (CP1252, Latin1) você vai se ferrar quando quiser usar json_ ou aceite mais de ~200 caracteres diferentes.

A primeira coisa a fazer é remover qualquer tipo de código de conversão etc que foi escrito com a intenção de tentar corrigir problemas de codificação. Como utf8_encode , htmlentitites , *_replace .. qualquer que seja.

Codificação de origem.
$str = "· Close up the server";

Ao escrever o acima, o arquivo de origem PHP precisa ser fisicamente codificado em UTF-8. Se você estiver no Windows, deverá fazer ou configurar isso explicitamente. UTF-8 não acontece magicamente no Windows.

Formulários enviados

Quando o usuário envia um formulário, a carga útil estará em qualquer codificação que você tenha declarado a página. Você pode declarar assim:
header("Content-Type: text/html; charset=utf-8");

Mas qualquer um pode enviar bytes arbitrários para o seu servidor, então você deve validar a entrada em UTF-8 antes de continuar. mb_check_encoding é bom.

Base de dados

Como neste momento seus dados estão chegando como UTF-8, suas strings de entrada estão em UTF-8. Você deve especificar isso após conectar-se ao banco de dados, especificando uma codificação de conexão.
mysql_set_charset("utf8"); //After making the connection, and before any queries
//or $mysqli->set_charset( "utf8");

Isso faz com que o banco de dados leia sua entrada em UTF-8 e codifique sua saída em UTF-8. Você também gostaria de definir suas colunas/tabelas/bancos de dados para UTF-8 também.

Sequências de escape Unicode \uxxxx ou \uhhhh\ullll ou \Uxxxxxxxx não são suportados em PHP.