Problemas com codificações de caracteres em LAMP App - UTF-8 ou não?
-
05-07-2019 - |
Pergunta
Eu ainda estou aprendendo as cordas com PHP e MySQL e eu sei que eu estou fazendo algo errado aqui com a forma como conjuntos de caracteres são criadas, mas não consigo descobrir a partir de ler aqui e na web o que devo fazer .
Eu tenho uma instalação lâmpada padrão com PHP 5, MySQL 5. Eu configurei tudo com os padrões. Quando alguns dos meus usuários comentários de entrada para o nosso banco de dados de alguns personagens aparecem de forma incorreta - principalmente apóstrofos e em traços no momento. No MySQL apostrostrophes aparecer como uma € ™. Eles exibir na página desta forma também (estou usando htmlentities para comentários dos usuários de saída).
Em phpMyAdmin diz meus MySQL Charset é UTF8-Unicode.
No meu banco de dados minhas tabelas são todos criados com o Latin1-sueco-ci padrão.
As minhas páginas da web todos têm meta http-equiv = "Content-Type" content = "text / html; charset = utf-8"
Quando eu olhar para o site http cabeçalhos vejo: Content-Type: text / html
Como um novato, eu não tinha considerado conjuntos de caracteres em tudo até que as coisas começaram a olhar estranho em algumas das minhas páginas. Então, isso faz mais sentido para mim para converter tudo para utf-8 e isso vai afetar o meu código PHP? Ou devo tentar obter tudo para o latim? E eu tenho que ir para o banco de dados e substituir esses códigos estranhos, ou será que eles magicamente exibir uma vez que eu configurar os conjuntos de caracteres corretamente? Toda a mexer eu fiz até agora não ajudou (I definir o http cabeçalhos para utf-8, e também tentou latim).
Solução
http://www.phpwact.org/php/i18n/charsets
Esse site me deu um monte de bons conselhos sobre como fazer tudo jogo agradável em UTF-8.
Eu também recomened mudar de htmlentities para htmlspecialchars como é mais UTF amigável.
O ponto principal é ter certeza que tudo está a falar a mesma língua. Seu banco de dados, a sua conexão com o banco, o seu PHP, sua página está em utf8 (deve ter uma meta tag e um cabeçalho dizendo isso).
Outras dicas
Se você realmente quer entender essas questões, gostaria de começar por ler este artigo em mysql.com . Basicamente, você quer todas as peças do quebra-cabeça que esperar UTF-8 unicode. No lado do PHP, você quer fazer algo como:
<?php header("Content-type: text/html; charset=utf-8");?>
<html>
<head>
<meta http-equiv="Content-type" value="text/html; charset=utf-8">
E quando você executa suas consultas de inserção que você quer ter a certeza tanto a codificação do tabela de caracteres e a codificação que você está executando as consultas em são UTF-8. Você pode realizar o último executando o SET NAMES utf8
consulta direita antes de executar uma consulta de inserção.
Desculpe por não entender toda a sua pergunta. "? UTF-8 ou não", mas quando parte da pergunta é, a resposta é: "UTF-8, é claro"
Você definitivamente quero resolver as coisas agora ou mais tarde. Uma das regras de programação mais importante é não continuar com uma má idéia - não cavar-se mais profundo
!Como latin1 e utf-8 são compatíveis, você pode converter suas tabelas para usar UTF-8 sem manipular os dados contidos pela mão. MySQL irá classificar esta parte para você.
É então importante verificar que tudo está falando utf-8. Defina o http cabeçalhos no Apache ou usar um tag meta -. Isso diz para um navegador que a saída HTML é utf-8
Com isto em mente, você precisa ter certeza de todos os dados que você envia realmente é utf-8! Configure seu IDE para salvar php / html arquivos como utf-8. Finalmente certificar-se de que o PHP está usando uma conexão utf-8 para MySQL - questão essa consulta após a conexão:
SET NAMES 'utf-8';