PHP / MySQL: inserir dados em problema de conjunto de caracteres de banco de dados

votos
0

Estou construindo um site que obtém texto de outra página e inseri-lo no banco de dados.

O problema é que todos os caracteres especiais são salvas no banco de dados usando a codificação HTML assim, então eu preciso para converter a saída usando:

<meta http-equiv=content-type content=text/html; charset=ISO-8859-1 />

Quer dizer, o que eu tenho agora é vez de apenas salvar o caractere 'a versão html' &#x27; é salvo no banco de dados. Isso acontece também quando caracteres espanhol ou por outras especiais são salvos. Em vez da letra N para ejample, eu recebo &ntilde; salvos.

Este espaço resíduos no banco de dados e também eu preciso converter depois, a saída usando o tipo de conteúdo assim:

Como posso apenas converter ou definir o charset antes de ser salvo ou apenas deixar MySQL convertê-lo ??

No caso de você precisa saber aqui está como eu conectar ao banco de dados:

function dbConnect() {      
    $conn = new mysqli(DB_SERVER, DB_USER, DB_PASSWORD, DB_NAME) or die ('Error.');
    return $conn;
}

    $conn = dbConnect();
    $stmt = $conn->stmt_init();

Espero que possa me ajudar!! Obrigado.

Publicado 19/04/2009 em 12:25
fonte usuário
Em outras línguas...                            


3 respostas

votos
1

Você pode usar html_entity_decode()converter de HTML a um (real) codificação de caracteres.

<? echo html_entity_decode("&ntilde;", ENT_COMPAT, "UTF-8"); ?>
ñ

Por favor note que "HTML" não é uma codificação de caracteres no sentido usual, por isso não é compreendido por bibliotecas, como iconv, nem por si MySQL.

Eu também recomendo (por exemplo acima) com todo o uso do aplicativo UTF-8. codificações de caracteres individuais, tais como ISO8859 são efetivamente obsoleto agora que Unicode é tão amplamente apoiada.

Respondeu 19/04/2009 em 12:36
fonte usuário

votos
0

Talvez você deve usar htmlspecialchars, sim, que htmlentitiesonde o primeiro apenas substitui os caracteres especiais de HTML &, <, >e "e nem todos os caracteres que podem ser representados por uma referência de caráter entidade nomeada como este último faz.

Respondeu 19/04/2009 em 12:41
fonte usuário

votos
1

Eu sugiro usar UTF-8 se existem caracteres não-ingleses. Você pode executar o SQL

SET NAMES UTF-8

para tornar a sua conexão dbase em UTF-8 logo após você se conectar à dbase.

Quando você fizer isso, você não deve usar "htmlspecialchars" ou "htmlentities" ao salvar os dados.

Respondeu 19/04/2009 em 12:44
fonte usuário

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