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).

Foi útil?

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';
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top