problemas de codificação de caracteres PHP

votos
4

Preciso de ajuda com um problema de codificação de caracteres que eu quiser ordenar uma vez por todas. Aqui está um exemplo de algum conteúdo que eu puxo de um feed XML, inserir no meu banco de dados e, em seguida, puxe para fora.

Como você não pode ver, um monte de caracteres especiais HTML corrompidos / quebrado.

Como eu uma vez por todas pode parar isso? Como eu sou capaz de suportar todos os tipos de personagens, etc.?

Eu tentei literalmente cada pedaço de codificação posso encontrar, às vezes corrige-lo para a maioria, mas outros ainda estão corrompidos.

Publicado 05/05/2009 em 18:09
fonte usuário
Em outras línguas...                            


8 respostas

Respondeu 05/05/2009 em 18:11
fonte usuário

votos
0

Primeiro, certifique-se de codificação de caracteres do seu banco de dados é definido para suportar UTF-8. Em segundo lugar, do PHP ICONV vai ser seu amigo. Por fim, garantir que seus cabeçalhos de resposta está enviando a codificação de caracteres adequada (novamente, UTF-8).

Respondeu 05/05/2009 em 18:24
fonte usuário

votos
1

Parece que um texto codificado UTF-8 é interpretado com a norma ISO 8859-1.

Se você está processando documentos XML, você tem que usar a codificação dada tanto no charsetparâmetro no campo de cabeçalho HTTPContent-Type ou no encodingatributo na declaração XML . Se nenhum dos dois for dada, a especificação XML declara UTF-8 ou UTF-16 como a codificação de caracteres padrão e você tem que usar um pouco de detecção .

Respondeu 05/05/2009 em 18:24
fonte usuário

votos
0

Você tentou utf8_encode()e utf8_decode()?

Qual deles você usa dependerá inteiramente de como seus dados são codificados, que você não especificar, mas eles são bastante úteis para este tipo de casos.

Respondeu 05/05/2009 em 18:25
fonte usuário

votos
-1

header('Content-type: text/html; charset=UTF-8') ;

/**
 * Encodes HTML safely for UTF-8. Use instead of htmlentities. 
 *
 * @param string $var 
 * @return string 
 */
function html_encode($var)
{
    return htmlentities($var, ENT_QUOTES, 'UTF-8');
}

Esses dois me salvou e eu acho que agora está trabalhando . Eu vou voltar se eu continuar a encontrar problemas. Devo armazená-lo no DB, por exemplo, como "&" ou como "&"?

Respondeu 05/05/2009 em 18:28
fonte usuário

votos
1

Parece que o link que você deu tem dados que são codificados em UTF-8. (Siga esse link, em seguida, alterar a codificação do seu navegador para utf-8).

I Parece que você está tendo problemas com a inserção e recuperação de seu banco de dados. Verifique se o seu banco de dados tabela tem utf-8 conjunto como a codificação.

Respondeu 05/05/2009 em 18:36
fonte usuário

votos
11

Para absolutamente uma vez por todas se certificar de que você nunca terá problemas com a codificação de novo:

Use UTF-8 em toda parte e em tudo!

Isso é (se você usa mysql e php):

  • Definir todas as tabelas em seu banco de dados para agrupamento "utf8_general_ci", por exemplo.
  • Depois de estabelecer a conexão de banco de dados, execute a seguinte consulta SQL: "Definir 'utf8' NOMES"
  • Certifique-se sempre as configurações do seu editor está definido para codificação UTF-8.
  • Tem a seguinte meta tag na seção de seus documentos HTML:

    <Meta http-equiv = "Content-Type" content = "text / html; charset = utf-8">

E algumas dicas de bônus:

OU:

Você pode apenas usar um arquivo de configuração do lado do servidor simples que cuida de todo o material de codificação. Neste caso, você não vai precisar de cabeçalho e / ou meta tags em todos ou modificação do arquivo php.ini. Basta adicionar o seu conjunto de caracteres codificação queria .htaccess arquivo e colocá-lo em sua raiz www. Se você quiser mexer com cordas conjunto de caracteres e usar seu código PHP para isso - isso é outra história. agrupamento de banco deve é ​​claro estar correto.

Nota de rodapé: UTF-8 não é a solução que codifica um seu uma solução. Não importa qual conjunto de caracteres / codificação um está usando, desde que o ambiente usado tem vindo a tomar para consideração.

Respondeu 07/05/2009 em 10:33
fonte usuário

votos
1

Depois de se conectar ao banco de dados, mas antes de fazer quaisquer transações, executar a seguinte linha, que garante toda a comunicação do banco de dados está em UTF-8:

mysql_query("SET character_set_results = 'utf8', character_set_client = 'utf8', character_set_connection = 'utf8', character_set_database = 'utf8', character_set_server = 'utf8'", $dbconn);

Respondeu 23/12/2009 em 07:20
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more