2016-03-07 3 views
9

Warum gibt utf8 chars auf einem Server zurück, aber nicht auf einem anderen? Einige Dateinamen enthalten Unicode-Zeichen wie æø und å ..opendir und readdir gibt utf8 zurück

In einigen Umgebungen UTF8 Zeichen gedruckt werden und in einigen iso Zeichen sind

header('content-type: text/plain'); 
$handle = opendir("./dir"); 
while($readdir = readdir($handle)){ 
    echo "$readdir\n"; 
} 

Ausgang Content-Type:text/plain;charset=UTF-8

Retursvar 2 med fejl p� debiteringsniveau.xml 
Retursvar 2 med fejl på debiteringsniveau.xml 

Die gleichen Gegenden gedruckt sind auf beiden Systemen installiert (UTF8)

dpkg-reconfigure locales 
+0

Welche zugrunde liegende Dateisystem im Einsatz ist? Wird dasselbe Dateisystem auf Servern verwendet, die unterschiedliche Ergebnisse liefern? –

+0

Alle Systeme sind Debian Jessie - gleiche Distributionen – clarkk

+0

Ok, nächste Frage - wie stellst du den Content-Type ein? Ich gehe davon aus, dass Sie über einen Webserver laufen und in einem Browser anzeigen? Ist der Inhaltstyp über 'header()' oder inline html ?? –

Antwort

0

Dies ist keine PHP-Frage, es ist eine Systemfrage. Das Problem stammt wahrscheinlich von falsch konfigurierten Gebietsschemas auf einem der Systeme. Wenn Sie locale ausführen, können Sie prüfen, welche Ländereinstellungen derzeit installiert sind. Wenn das Gebietsschema nicht als UTF-8 markiert ist, wird dies Ihr Problem sein. Durch das Installieren der korrekten UTF-8-Ländereinstellung wird das Problem behoben.

+0

Die gleichen Gebietsschemas sind auf beiden Systemen installiert. Beide UTF8 – clarkk

2

Sie können feststellen, dass Ihr Webserver unter einem anderen Gebietsschema auf jedem System ausgeführt wird.

Um dies zu ermitteln, die folgende PHP über den Webserver auszuführen:

<?php 
system("locale"); 

Die Chancen stehen die Webserver die richtigen Zeichen der Rückkehr wird entweder ein ‚utf8‘ locale oder ‚C‘ in laufen.

Das Gebietsschema, das der Webserver verwendet, kann an verschiedenen Orten eingestellt werden. Entweder mit dem systemweiten Gebietsschema - oder einem dienstspezifischen Gebietsschema. Sie müssen wahrscheinlich den Grund für einen Unterschied untersuchen und entscheiden, ob Sie Ihr systemweites Gebietsschema oder nur den Webserver aktualisieren möchten.

auf Debian, die systemweite locale Änderung

dpkg-reconfigure locales 

und folgen Sie den Anweisungen verwendet werden, geändert.

Alternativ für dienstspezifische Ländereinstellungen. Setzen Sie die Umgebungsvariable 'LANG' vor dem Starten des Service auf den Wert, den Sie im Service-Init-Skript benötigen. Es gibt wahrscheinlich eine servicespezifische Konfigurationsdatei, die Sie auch suchen können, um die Änderung im Fall von Webserver-Upgrades beizubehalten.

+0

Die genauen Gebietsschemas sind auf beiden Systemen installiert. Beide UTF8 – clarkk

+0

Zur Klarstellung - das Gebietsschema des Systems kann sich von dem des Webserver oder eines anderen Prozesses unterscheiden läuft unter. Mit welcher Methode haben Sie festgestellt, dass beide Webserver als UTF-8 ausgeführt werden? –

-1

Versuchen utf-8-Codierung in der Kopfzeile zu setzen:

header('content-type: text/plain; charset:utf-8');