Neden bu genişletilmiş ASCII karakter (A, E, vb) Ile yerini almak

8 Cevap php

Neden bu genişletilmiş ASCII karakter (A, E, vb) Ile yerini almak karakterler?

Ben bir pic bağlı ... ama MySQL veri çekmek için PHP kullanıyorum, ve bu yerlerin bazıları ben Yazı Arial kullanıyorum ... karakter artırdık.

Burada ekran resmini görebilirsiniz: http://img269.imageshack.us/i/funnychar.png/

Hala önerileri sonra oluyor, burada ben ne yaptım:

Benim firefox (görünüm-> kodlama) Ancak, seçenek etiketleri içindeki metni yerine hala gerçek aksanlı birinin komik karakterini gösteriyor, satır ekledikten sonra UTF-8 ayarlanır. Ben şimdi ne bakmak gerekir?

UPDATE: I have the following in the PHP program that is giving my those <?> characters...

ini_set( 'default_charset', 'UTF-8' );

Ve doğru benim zend db nesnesi oluşturulduktan sonra, ben aşağıdaki sorguyu kuruyorum:

$db->query("SET NAMES utf8;");

Ben UTF-8 üzerinden tüm tabloları değiştirildi ve o yardımcı asla (zaman kaybı) tüm verileri reinserted. Bu önce latin1 edildi.

Ayrıca DURUM bildiriyor:

Connection:             Localhost via UNIX socket
Server characterset:    latin1
Db     characterset:    latin1
Client characterset:    utf8
Conn.  characterset:    utf8
UNIX socket:            /var/run/mysqld/mysqld.sock
Uptime:                 4 days 20 hours 59 min 41 sec

Looking at the source of the page, I see <option value="Br�l� Lake"> Br�l� Lake

OK- NEW UPDATE- I Changed everything in my PHP veHTML to:

ve

header ('Content-Type: text / html; charset = latin1');

Şimdi çalışıyor, ne oluyor? Nasıl bu UTF-8'e dönüştürmek mi?

8 Cevap

Yani bir karakter için kullanmak kodlama bilmiyor zaman tarayıcı yaptığı budur. Eğer başlıklarını veya işaretleme meta ya müşteri göndermek metin kodlama türü belirtin emin olun.

HTML:

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

PHP (diğer herhangi bir içeriği önce istemciye gönderilir) in:

header('Content-Type: text/html; charset=utf-8');

Ben UTF-8 kodlamasını isteyeceksiniz varsayarak yaşıyorum. Siteniz metin için başka bir kodlama kullanıyorsa, o zaman kullandığınız kodlama ile UTF-8 değiştirmeniz gerekir.

Kodlamasını belirtmek için HTML kullanma hakkında Unutulmaması gereken bir şey, tarayıcı o Content-Type meta etiketi görür kez bir sayfa render yeniden olmasıdır, böylece hemen sonra <meta /> etiketi içermelidir sayfanızda <head /> etiketi yüzden tarayıcı ihtiyacı daha fazla bir ekstra işlem yapmaz.

Başka bir ortak charset "iso-8859-1" (Temel Latin), UTF-8 yerine kullanmak isteyebilirsiniz olduğunu. Siz bu müthiş makaleden daha detaylı bilgi bulabilirsiniz character encodings and the web. Ayrıca alabilirsiniz ayrıntılı bir list of character encodings here Belirli bir türü gerekiyorsa.


Başka hiçbir şey işe yaramazsa, başka bir (nadir) olasılık sayfayı görüntülemek için gereken karakterler ile bilgisayarınızda yüklü bir yazı yok olmasıdır. Ben tarayıcı her zaman başka bir yazı ile bir yazı kullanılamayan karakterleri yerini böylece benim makinede yüklü yazı tiplerinin bir şey var muhtemelen çünkü, denedim repeating your results on my own server ve hiçbir şans yaşadım.

Ne daha fazla araştırılması ile bildirim yaptım eğer metin Unicode karakterleri beklenmedik hale getirebilir, gibi tarayıcı raporları kodlama farklı bir kodlama gönderilmiş olmasıdır. Bu geçici bir çözüm için, ben HTML character entity representation özel karakterlerin kullanıldığı, bu nedenle â Benim HTML &#226; olur ve é {[(olur 4)]}. Ben bu kez yaptım benim karakterler düzgün hale gibi, ne olursa olsun ben kodlama bildirdi.

Açıkçası HTML kodlamak Unicode karakter için veritabanını değiştirmek istemiyorum. Bunu yapmak gerekir eğer iyi seçenek htmlentities() , bir PHP işlevini kullanmaktır. Sen Bu yapmak için can sıkıcı olabilir içeri Unicode karakter olmasını bekliyoruz herhangi bir veri odaklı metin üzerinde bu işlevi kullanmak gerekir, ancak kodlama belirterek yardım etmezse, bu iş için Unicode karakter zorlamak için iyi bir son çaredir.

"Genişletilmiş ASCII" denilen böyle bir standart, proprietary extensions sadece bir grup var.

Neyse, orada olası çeşitli nedenleri vardır, ancak yazı tipi değil. MySQL belirlenen karakteri kontrol ederek başlar ve daha sonra PHP ne yaptığını görebilirsiniz. Dan dediği gibi, emin PHP aslında kullanıyor kodlayan karakterinin olması gerekiyor.

Diğerleri de söylediğim gibi, bu bir karakter kodlama soru. Sen Joel Spolsky's article karakter kodlaması hakkında okumalısınız.

Ayarı

header('Content-Type: text/html; charset=utf-8');

php sayfa tarayıcıya UTF-8 karakterlerini yazılı ise sorununuzu çözecektir. Metin hala bozuk ise, bu metin UTF-8 değil, mümkündür; Bu durumda Content-Type başlığında doğru kodlama adını kullanmak gerekir. Eğer bir seçim varsa, her zaman UTF-8 veya başka bir Unicode kodlaması kullanırlar.

Basit düzeltme

ini_set( 'default_charset', 'UTF-8' );

Bu şekilde hakkında elle Content-Type üstbilgisi kendinizi gönderme endişelenmenize gerek yok.

EDIT

as UTF-8 diğer bazı karakter kümesi olarak UTF-8 veri gönderme gibi sorunlara neden gibi muhtemel olan tarayıcıya olmayan UTF-8 veri gönderme - aslında UTF-8 gibi veri depolama emin olun .

SELECT table_collation
  FROM information_schema.`TABLES` T
 WHERE table_name=[Table Name];

SELECT default_character_set_name
     , default_collation_name
  FROM information_schema.`SCHEMATA` S
 WHERE schema_name=[Schema Name];

Bu değerleri kontrol edin

<-> Tarayıcı ve MySQL <-> orada iki iletim kodlamaları, PHP PHP ve bunlar birbirleri ile tutarlı olması gerekir. Mysql için kodlamayı ayarlama <-> PHP aşağıdaki soruların cevapları ile ele alınmaktadır:

Hızlı cevap "SET İSİMLERİ UTF8" dir.

Yavaş cevap diğer yanıtlar önerilen makaleleri okumak için - işler gibi görünüyor kadar neler olup bittiğini anlamak ve deneme yanılma uygulamak daha bir hassas değişiklik yapmak çok daha iyi. Bu hatalı kodlama yapılandırmaları çok kötü pisliği verilerinizi olabilir sadece kozmetik bir UI sorunu değildir. Marge üzerine fıstık ezmesi koyarak dışarı almak için çalışır Lisa saçları sakız alır Simpsons bölüm, düşünün.

HTML varlıkları içine tüm özel karakter kodlamak yerine charset bağlı olmalıdır.

htmlentities() sizin için çalışma yapacağız.

Ben UTF-8 üzerinden tüm tabloları değiştirildi ve o yardımcı asla (zaman kaybı) tüm verileri reinserted. Bu önce latin1 edildi.

Orijinal veri latin1 ise, o zaman bir UTF-8 veritabanı takarak won't convert it to UTF-8, AFAIK, aynı veri yazalim ama şimdi o nedenle kırılma, UTF-8 olduğuna inanıyorum.

Bir SQL dökümü var ise, ben UTF-8 dönüştürmek için bir araç üzerinden çalışan öneririm. Notepad + +, bu oldukça iyi yapar - sadece menüde "UTF-8 dönüştürmek" bulmak sonra, aksanlı karakterler düzgün görüntülendiğini kontrol edin, dosyayı açın.

Bu özel karakterler genelde uzantıları nedeniyle görünür. Biz charset=utf-8 biz ekleyerek onları ortadan kaldırabilir ile bir meta etiketi sağlarsanız:

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

meta etiketleri