Web sitesinde karakter kodlaması ile zorluk

3 Cevap php

Ben dünyanın dört bir yanından kullanıcıların profillerini göndermenize olanak sağlayan bir web sitesi var. Somewhere karakterleri görüntüleme / alma / depolama arasında, bunlar doğru render değildir. Ben sorunlarınız hangi adım emin değilim, ama burada ne oluyor bir dökümünü.

Ben psql komut satırı arayüzü üzerinden benim PostgreSQL DB bir SELECT yaptığınızda, ben böyle bana onlar doğru tasarrufu inanıyorum kılan, görünen aşağıdaki gibi bazı karakterler bakın:

  • '
  • ...
  • å

Ancak, benim web sitesinde aşağıdaki gibi sırasıyla görünen yukarıdaki karakterleri görüyorum:

  • â
  • â |
  • Ã ¥

Ben gelen, hayır şans ile, başlığında kodlamasını değiştirmeyi denedim:

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

için:

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

Ben sadece benim kullanıcılar için doğru emin herşeyi yapmaya görüntüler bakarak olmalıdır herhangi bir PHP ayarları / fonksiyonları, PostgreSQL ayarları, HTML chartsets'ten, ya da başka bir şey bazı fikir arıyorum.

3 Cevap

* �
* �
* å

Bu model, ilk UTF-8 ile ISO-8859-1 dan tekrar ISO-8859-1 ile UTF-8 dönüştürülmüş konum ve olduğunu gösterir.

Her şeyden önce, içerik-türü başlığı gayet iyi. Tutun UTF-8.

DB'den veri sorgulama ve yanıt çıktı gönderme arasındaki kod mantığını şey yanlış kullanılarak ISO-8859-1. Edilir Bu DB veri sorgulama gibi adımları içerir. Ben ilk ilk adım ile başlamak istiyorum. pg_set_client_encoding yardımcı olur deneyin:

pg_set_client_encoding($connection, 'UTF8');

Diğer adımlar açıklanmıştır here. Umarım bu yardımcı olur.

You probably need to set your client encoding in Postgres. http://developer.postgresql.org/pgdocs/postgres/multibyte.html

Ayrıca, HTTP başlığında (yerine sadece meta tag) bunu yapmak zorunda kalabilirsiniz. PHP kullanarak ediyorsanız, sizin deyiminizle:

header("Content-Type: text/html; charset=UTF-8");

Okuma ve db yazarken aynı istemci kodlamayı kullandığınızdan emin olun.

Ben sorunu tahmin ediyorum tarayıcı veya webserver'daki - o Latince-1 olarak oynanırsa olan UTF-8 dizileri vardır. Webserver Latin-1, pek çok yok, belgedeki her şeyi geçersiz kılar olarak etiketlenmiş bir HTTP başlığı gönderir eğer. Webserver (belge istişare edildiği durumda) bir karakter kümesi ilan veya (UTF-8) doğru bir beyan değil ya ihtiyacı vardır. Bu imkansız ise, bir geçici çözüm HTML olarak sunarken baz 0-127 ASCII aralığının dışındaki karakterler için başvuruları kullanmak & # etmektir.