2009-05-15 12 views
0

Wir haben eine PHP-MySQL-Anwendung in zwei Sprachen entwickelt - Englisch und Gujarati. Die Gujarati-Sprache enthält Symbole, die Unicode-UTF-8-Codierung für eine ordnungsgemäße Anzeige benötigen.Internationale Schriftarten Anzeige Problem mit UTF-8

Die Anwendung läuft perfekt auf meinem Windows-basierten localhost und auf meinem Linux-basierten Testserver im Internet.

Aber wenn ich die Anwendung auf den Client-Webserver (Linux Redhat basiert) übertragen, werden die Gujarati-Zeichen nicht richtig angezeigt.

Ich habe die Rohdaten von beiden Datenbanken überprüft (auf meinem Webserver und auf dem Webserver des Clients) - es ist genau das gleiche. Das Display ist jedoch anders. Auf meinem Server werden die Schriftarten perfekt angezeigt, aber wenn ich versuche, auf die Client-Kopie der App zuzugreifen, ist die Anzeige der Guajarati-Schrift falsch.

Da ich beide Installationsinstanzen von demselben Computer und demselben Browser aus teste, liegt das Problem nicht an der Browserinkompatibilität oder dem Code. Ich glaube, dass einige Servereinstellungen vorgenommen werden müssen, die ich verpasse.

Können Sie bitte helfen.

Dank

Vinayak

UPDATE

Dank. Wir haben die Apache- und PHP-Einstellungsvorschläge der Mitglieder der SO-Community ausprobiert. Aber das Problem bleibt bestehen.

Um das Problem zu durchbrechen, haben wir uns die verschiedenen Phasen angesehen, die die Daten durchlaufen.

Die beiden Datenbanken (am Ende des Clients und an unserem Ende) sind identisch. Es gibt keinen Unterschied in ihnen.

Der nächste Schritt in dieser App ist, dass eine Abfrage ausgeführt wird, die die Daten wiederherstellt, eine XML-Datei erstellt und speichert.

Diese XML-Datei wird dann mit einer PHP-Seite angezeigt.

Wir haben festgestellt, dass das Problem darin besteht, dass in der erstellten XML-Datei ein Unterschied besteht. Der Code für die Erstellung der XML-Datei verwendet wird, ist wie folgt:

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); 

Irgendwelche Ideen ??

Dank

Vinayak

+0

http://stackoverflow.com/questions/346531/utf8-problem-with-mysql-5/346552#346552 – markus

Antwort

0

Vergewissern Sie sich, dass die Response-Header korrekt sind - die Content-type sollte UTF-8 in ihm.

0

Überprüfen Sie die Zeichensatz-Einstellungen auf der DB-Instanz auf dem Client-Rechner:

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

Bevor Sie Text Abrufen Ausführen von Abfragen, versuchen ausführen:

SET NAMES utf8 
SET CHARACTER SET utf8 

Wenn das funktioniert, möchten Sie vielleicht füge folgendes zu meinem mein hinzu.cnf auf dem Client-Rechner:

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

Da Sie angegeben haben, dass es in Ihrer Entwicklungsumgebungen und nicht auf Ihre Kunden funktioniert, sollten Sie die Kunden Apache AddDefaultCharset und setzen Sie diese auf UTF-8 prüfen, ob es ist nicht schon. (Unter der Annahme, dass sie Apache verwenden.)

Ich neige dazu, die folgenden Schritte, um sicherzustellen,

  1. PHP-Header gesendet wird in UTF-8
  2. Meta-Tag gesetzt ist auf UTF-8 geprüft werden (Content-Type)
  3. Lagerung auf UTF8 gesetzt ist
  4. Server Ausgang wird auf UTF8 gesetzt
  5. Achten Sie darauf, Ihre pHP-Code-Dateien verschlüsselt werden in UTF8 mit BOM (Byte Order Mark)
+0

und 5. Stellen Sie sicher, dass Ihre PHP-Code-Dateien in UTF8 mit BOM (Byte Order Mark) codiert sind dass Sonderzeichen in HTML oder PHP wie erwartet erscheinen –

+0

@dcaunt - Ganz richtig. Das auch. (Bearbeitet.) –

2

Die Antwort liegt fast sicher in den Kopfzeilen, die mit den Webseiten gesendet werden. Um Probleme wie diese zu diagnostizieren, habe ich es nützlich gefunden, das Firefox-Addon "Live HTTP Headers" zu installieren.

Installieren Sie das Addon, schalten Sie es ein und laden Sie eine Seite vom Webserver des Clients und von Ihrer eigenen neu.

Was werden Sie wahrscheinlich ist, dass die Seite von Ihrem Webserver diente dazu, die Header hat:

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

Während, wenn vom Kunden Webserver diente es sagt:

Content-Type: text/html 

Die Art und Weise würde ich empfehlen, dies zu beheben, um sicherzustellen, dass Sie den Header explizit so setzen, dass utf-8 auf jeder Seite Ihrer Anwendung angegeben wird. Dies isoliert Ihre Anwendung von zukünftigen Konfigurationsänderungen auf der Client-Seite.

Um dies zu tun, auf jeder Seite

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

aufrufen, bevor Daten gesendet werden.

0

Bitte diesen Meta-Tag verwenden: meta http-equiv = "Content-Type" content = "text/html; charset = UTF-8"

Stellen Sie sicher, verwenden Sie diesen Code in php: mysql_query ("set character_set_results = 'utf8' ");