UTF-8 ile Uluslararası yazı tipleri Ekran Sayı

5 Cevap php

Biz iki dilde bir PHP-MySQL uygulama geliştirdik - İngilizce ve Gujaratice. Gujarati dili düzgün görüntülenmesi için unicode UTF-8 kodlaması gerekiyor sembolleri içeriyor.

Uygulama benim windows tabanlı localhost ve web'de Linux tabanlı test sunucusu üzerinde mükemmel çalışır.

Ben müşterinin web sunucusu (tabanlı linux redhat) için uygulamaya aktarmak Ama, Gujarati karakterler düzgün görüntülenmiyor.

Ben veritabanları (benim webserver ve müşterinin webserver) hem ham verileri kontrol ettikten - bu tam olarak aynıdır. Ancak görüntü farklıdır. Benim sunucuda fontları mükemmel görüntülenir, ama ben app müşterinin kopyasını erişmeye çalıştığınızda, Guajarati yazı ekran tüm yanlış vardır.

Ben aynı makine ve aynı tarayıcı hem de bu kurulum örneklerini test ediyorum bu yana, konu tarayıcı uygunsuzluğu veya kod değildir. Ben dışarı eksik olan, yapılması gereken bazı sunucu ayarı olduğuna inanıyorum.

Lütfen yardımcı olabilir.

Teşekkürler

Vinayak

UPDATE

Teşekkürler. We have tried the apache and php settings suggestions given by the SO community members. But the problem remains.

Arıza biz veri geçmektedir farklı aşamalarında baktım sorunu.

(Müşterinin sonunda ve bizim sonunda at) iki veritabanları aynıdır. Onlara hiçbir fark yoktur.

Bu app sonraki adım, bir sorgu verileri kurtarır hangi çalıştırılan bir xml dosyası oluşturur ve kaydeder.

Bu XML dosya daha sonra bir PHP sayfasını kullanarak ekranda görüntülenir.

Biz sorunun oluşturulan XML dosyasında bir fark olduğunu olduğunu belirledik. XML dosyasını oluşturmak için kullanılan kod aşağıdaki gibidir:

function fnCreateTestXML($testid)
{
	$objQuery = new clsQuery();
	$objTest = new clsTest();
	$setnames = $objQuery->fnSelectRecords("tbl_testsets", "setnumber", "");
	$queryresultstests = $objQuery->fnSelectRecords("tbl_tests", "", "");
	if($queryresultstests)
	{

		foreach($queryresultstests as $queryresulttest)
		{
			foreach($setnames as $setname)
			{
				//Creating Root node test and set its attribute 
				$doc = new DomDocument('1.0','utf-8');
				$root = $doc->createElement('test');
				$root = $doc->appendChild($root);
				//and so on

//Saving XML on the disk
				$xml_create = $doc->saveXML();
				$testname = "testsxml.xml";
				$xml_string = $doc->save($testname);

Herhangi bir fikir?

Teşekkürler

Vinayak

5 Cevap

Bu sorunun cevabı kesinlikle web sayfaları ile gönderilen başlıklarını yatıyor. Bu gibi sorunları teşhis etmek için, ben yararlı firefox addon yüklemek buldum "Live HTTP Headers".

Bu addon yüklemek, sonra açın ve müşterinin web sunucusu sayfayı yeniden, ve kendi gelen.

Ne muhtemelen göreceksiniz sunucunuza tarafından sunulan sayfa başlığı olmasıdır:

Content-Type: text/html; charset=UTF-8

Istemci web sunucusu tarafından sunulan zaman ise diyor ki:

Content-Type: text/html

Eğer açıkça uygulamanın her sayfasında utf-8 belirtmek için başlığını ayarlama sağlamak için ben bu sabitleme tavsiye ederim yoludur. Bu daha sonra müşterinin ucunda gelecekteki yapılandırma değişiklikleri uygulamanızı yalıtır.

Bunu yapmak için, çağrı

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

herhangi bir veri göndermeden önce her sayfada.

Eğer müşterileriniz üzerinde geliştirme ortamlarda çalışan ve olmadığını ifade ettik beri, Apache'nin AddDefaultCharset istemcileri ve zaten değilse, UTF-8, bu ayarlamak isteyebilirsiniz. (Onlar Apache kullanarak konum olduğunu varsayarsak.)

Eminim aşağıdaki adımlar kontrol edilir yapmak eğilimindedir

  1. PHP Kafa UTF-8 olarak gönderilir
  2. Meta tag ayarlanır UTF-8 (Content-Type)
  3. Depolama UTF-8'e ayarlanır
  4. Sunucu çıkış UTF-8'e ayarlanır
  5. Php kod dosyaları BOM (Byte Order Mark) ile UTF8 kodlanmış olduğundan emin olun

Yanıt başlıkları doğru olduğundan emin olun - Content-type içinde UTF-8 olmalıdır.

Istemci makine üzerinde DB örneğinde karakter kümesi ayarlarını kontrol edin:

SHOW VARIABLES LIKE 'character_set%';
SHOW VARIABLES LIKE 'collation%';

Herhangi bir metin getiriliyor sorguları yürütme önce çalıştırmayı deneyin:

SET NAMES utf8
SET CHARACTER SET utf8

Bu çalışırsa, istemci makine üzerinde my.cnf için aşağıdaki eklemek isteyebilirsiniz:

[mysqld]
collation_server=utf8_unicode_ci
character_set_server=utf8
default-character-set=utf8
default-collation=utf8_general_ci
collation-server=utf8_general_ci

Bu meta etiketi kullanın: meta http-equiv = "Content-Type" content = "text / html; charset = UTF-8"

Php emin kullanımı bu kod Üyeler: mysql_query ("character_set_results = 'utf8' set");