Pergunta

Usando PHP contra um banco de dados compatível UTF-8. Veja como entrada vai em.

  1. tipos de usuário de entrada em textarea
  2. textarea codificado com javascript escape ()
  3. passou via HTTP POST
  4. decodificado com PHP rawurldecode ()
  5. passou por HTMLPurifier com as configurações padrão
  6. escapou para o MySQL e armazenado no banco de dados

E ele sai da maneira usual e eu corro unescape () no carregamento da página. Esta é permitir que as pessoas, por exemplo, copiar e colar diretamente de um documento do word e ter as aspas inteligentes aparecer.

Mas HTMLPurifier parece estar a sobrepor não-UTF-8 caracteres especiais, aqueles que escape () a uma expressão% simples, como Ö, que escapa para% D6, enquanto smartquotes escapar a% u2024 ou algo e ir para o banco de dados dessa maneira. Ele pega tanto o carácter especial e aquele imediatamente a seguir.

Eu preciso mudar alguma coisa nesse processo. Talvez eu preciso mudar várias coisas.

O que posso fazer para não ficar caracteres especiais derrotado?

Foi útil?

Solução

  1. textarea codificado com javascript escape ()

escape não é seguro para não-ascii. Use escapeURIComponent

  1. passou via HTTP POST

Eu suponho que você usar XmlHttpRequest? Se não, certifique-se de que a página que contém o formulário é servido como utf-8.

  1. decodificado com PHP rawurldecode ()

Se você acessar o valor através $_POST, você não deve decodificá-lo, uma vez que já foi feito. Se o fizer, vai atrapalhar dados.

  1. escapou para o MySQL e armazenado no banco de dados

Certifique-se de que você não tem magic quotes ligado. Certifique-se de que os banco de dados armazena tabelas como utf-8 (A codificação e o agrupamento deve ser tanto utf-8). Certifique-se de que a conexão entre PHP e MySQL é utf-8 (Use set names utf8, se você não usar DOP).

Finalmente, certifique-se de que a página é servido como utf-8 quando você saída a corda novamente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top