problemas de codificação 
pessoal estou usando meu html charset utf-8 e no meu banco de dados está como utf-general-ci até ai tudo bem porém aquele mesmo problema eu gravo no banco apareçe aqueles caracteres estranhos porém q
<p>tá legal. </p>
<p>também tou seguindo minhas trilhas, rs.
mas eu não falo do phpmyadmin, pois eu nem uso.
eu falo da tabela mesmo.</p>
<p>apenas pra exemplificar, ao criar uma tabela, cria na mão apenas para teste.
vai aqui um exemplo</p>
<pre class="prettyprint "><code>create table &#96;produtos&#96; (
 &#96;id&#96; integer auto\_increment,
 &#96;nome&#96; varchar(255) not null,
 &#96;preco&#96; decimal(10,0) not null,
 &#96;descricao&#96; longtext,
 &#96;categoria\_id&#96; integer not null,
 &#96;usado&#96; tinyint(1) not null default &#39;0&#39;,
 primary key (&#96;id&#96;)
)engine&#61;innodb default charset&#61;utf8;</code></pre>
<p>agora também sigo as minhas trilhas.</p>
O espaço não-separável não está sendo guardada no seu banco de dados como um personagem estrangeiro estranho, ele está sendo salvo como *dois* caracteres. O caractere de Unicode espaço sem quebra é codificado em UTF-8 como `0xC2 0xA0`, o qual na norma ISO 8859-1-se parece com "A" (isto é, um caracteres estrangeiros estranho seguido de um espaço não separável).


Você provavelmente está se esquecendo de fazer `SET NAMES 'utf8'`na sua conexão de banco de dados, o que faz com PHP para enviar seus dados para o MySQL como ISO-8859-1 (o padrão).


Dê uma olhada no " [UTF-8 todo o caminho ...](https://stackoverflow.com/questions/279170/utf-8-all-the-way-through) " para ver como configurar corretamente UTF-8 quando usando PHP e MySQL. ```
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 "&"? Quando o documento é transferido através de HTTP, [as informações do cabeçalho HTTP são as informações crutial](http://www.w3.org/TR/html401/charset.html#h-5.2.2) :



> 
> [...] agentes de usuário conformes devem observar as seguintes prioridades para determinar a codificação de caracteres de um documento (da mais alta prioridade para a menor):
> 
> 
> 1. Um HTTP " `charset`" parâmetro em um " `Content-Type`campo".
> 2. Uma `META`declaração com " `http-equiv`" definido para " `Content-Type`" e um valor definido para " `charset`".
> 3. O `charset`conjunto de atributos em um elemento que designa um recurso externo.
> 
> 
> 


Portanto, verifique se você declarar a codificação de caracteres no [`Content-Type`campo de cabeçalho](http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.17) e não apenas dentro do documento. olá victor, tudo bem?o problema do seu código é que você está declarando o vetor de strings de maneira incorreta. o certo é usar assim: char nome[5][100]; onde o primeiro par de colchetes é o ta... normalmente esse problema acontece por problema no local onde o arquivo está sendo salvo.

ou o caminho tem mais do que 256 caracteres (que é o limite… Note-se que não se trata de "programação estrita unicode" per se, mas alguma experiência prática.


O que fizemos na minha empresa era criar uma biblioteca invólucro em torno da biblioteca ICU da IBM. A biblioteca wrapper tem uma interface UTF-8 e converte para UTF-16 quando é necessário chamar UTI. No nosso caso, nós não se preocupar muito com sucessos de desempenho. Quando o desempenho foi um problema, nós também fornecido interfaces de UTF-16 (usando o nosso próprio tipo de dados).


Aplicações poderia permanecer em grande parte como-é (usando caracteres), embora em alguns casos, eles precisam estar cientes de certas questões. Por exemplo, em vez de strncpy () usamos um invólucro que evita cortar sequências UTF-8. No nosso caso, isso é suficiente, mas também pode considerar cheques para combinar caracteres. Temos também wrappers para a contagem do número de codepoints, o número de grafemas, etc.


Quando a interface com outros sistemas, às vezes precisamos fazer composição caráter personalizado, assim você pode precisar de alguma flexibilidade lá (dependendo do aplicativo).


Nós não usamos wchar\_t. Usando UTI evita problemas inesperados na portabilidade (mas não outros problemas inesperados, é claro :-). <p>tudo bem. eu descobri que o file\_get\_contents () não está causando esse problema. há uma razão diferente da qual falo em outra questão. me bobo.</p><p>veja esta pergunta: <a href="https://stackoverflow.com/questions/2236889/why-does-dom-change-encoding">por que o dom muda a codificação?</a> </p> <p>tente isto:</p><pre><code>$str = preg\_replace\_callback('/\\\\u([0-9a-fa-f]{4})/', function ($match) { return mb\_convert\_encoding(pack('h*', $match[1]), 'utf-8', 'ucs-2be'); }, $str); </code></pre><p>caso seja baseado em utf-16, c/c++/java/json-style:</p><pre><code>$str = preg\_replace\_callback('/\\\\u([0-9a-fa-f]{4})/', function ($match) { return mb\_convert\_encoding(pack('h*', $match[1]), 'utf-8', 'utf-16be'); }, $str); </code></pre> <p>a especificação json <em>requer</em> suporte utf-8 por decodificadores. como resultado, todos os decodificadores json podem manipular o utf-8 tão bem quanto eles podem manipular as seqüências numéricas de escape. esse também é o caso dos intérpretes de javascript, o que significa que o jsonp também lidará com o json codificado em utf-8.</p><p>a capacidade dos codificadores json de usar as seqüências numéricas de escape apenas oferece mais opções. uma razão pela qual você pode escolher as seqüências de escape numéricas seria se um mecanismo de transporte <em>entre</em> seu codificador e o decodificador pretendido não é seguro para binário.</p><p>outro motivo pelo qual você pode querer usar sequências de escape numéricas é impedir que determinados caracteres apareçam no fluxo, como <code>&lt;</code>, <code>&amp;</code> e <code>"</code>, que podem ser interpretados como sequências html se o código json for colocado sem escapar para html ou um navegador interpretar incorretamente como html. isso pode ser uma defesa contra injeção de html ou scripts entre sites (note: alguns caracteres devem ter escape em json, incluindo <code>"</code> e <code>\</code>).</p><p>algumas estruturas, incluindo a implementação do json no php, <em>sempre</em> fazem as seqüências numéricas de escape no lado do codificador para qualquer caractere fora do ascii. isso é destinado a compatibilidade máxima com mecanismos de transporte limitados e similares. no entanto, isso não deve ser interpretado como uma indicação de que os decodificadores json têm um problema com o utf-8.</p><p>então, eu acho que você só poderia decidir qual usar assim:</p><ul> <li> <p>basta usar o utf-8, a menos que seu método de armazenamento ou transporte entre o codificador e o decodificador não seja seguro para binário.</p> </li> <li> <p>caso contrário, use as seqüências de escape numéricas.</p> </li> </ul> Normalmente servidores Apache + PHP de webhosters são configurados para enviar **NO `charset`cabeçalho** . O caminho mais curto para testar como seu servidor está configurado são estes:


* Utilize [esta ferramenta para ver o cabeçalho do servidor](http://www.seoconsultants.com/tools/headers) , obtendo qualquer uma das suas páginas em seu webiste. Se nos cabeçalhos de servidor que você ver um `charset`significa que o servidor está usando, geralmente ele não irá conter `charset`.
* Outra maneira é para executar este script simples em seu servidor: `<?php echo ini_get('default_charset'); ?>`Como dito acima o que normalmente imprime uma cadeia vazia, se for diferente ela vai lhe mostrar o `charset`do PHP.


A 2ª solução é supondo Apache não está configurado com `AddDefaultCharset some_charset`o que não é geralmente o caso, mas, nesse caso, eu tenho medo configuração Apache pode substituir PHP deafult\_charset directiva ini.