2016-03-07 22 views
9

Perché restituisce i caratteri utf8 su un server ma non su un altro? Alcuni nomi di file contengono caratteri unicode come æø e å ..opendir e readdir restituisce utf8

In alcuni ambienti utf8 caratteri vengono stampati e in alcuni caratteri iso vengono stampate

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

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

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

Gli stessi locali sono installato su entrambi i sistemi (UTF8)

dpkg-reconfigure locales 
+0

Che filesystem sottostante è in uso? È lo stesso filesystem in uso sui server che restituiscono risultati diversi? –

+0

Tutti i sistemi sono Debian Jessie - stesse distribuzioni – clarkk

+0

Ok, domanda successiva: come si imposta Content-Type. Suppongo che tu stia funzionando tramite un server web e visualizzando in un browser? Il tipo di contenuto è impostato tramite 'header()' o inline html ?? –

risposta

0

Questa non è una domanda PHP, è una domanda di sistema. Il problema deriva probabilmente da impostazioni locali configurate in modo errato su uno dei sistemi. Se si esegue locale, è possibile controllare quali versioni locali sono attualmente installate. Se le impostazioni internazionali non sono contrassegnate come UTF-8, questo sarà il tuo problema. L'installazione delle impostazioni internazionali UTF-8 corrette risolverà il problema.

+0

Le stesse identiche localizzazioni sono installate su entrambi i sistemi. Entrambe UTF8 – clarkk

2

È possibile che il server Web sia in esecuzione in una diversa lingua su ciascun sistema.

Per determinare questo eseguire il seguente php tramite il proprio server web:

<?php 
system("locale"); 

È probabile che il server web di ritorno i caratteri corretti è in esecuzione sia in un locale 'utf8' o 'C'.

Le impostazioni internazionali utilizzate dal server Web possono essere impostate in posizioni diverse. O utilizzando le impostazioni internazionali del sistema o quelle specifiche del servizio. Probabilmente è necessario indagare sul motivo di qualsiasi differenza e decidere se aggiornare le impostazioni internazionali del sistema o solo il server web.

Su Debian, l'ampia variazione locale del sistema essere modificati utilizzando

dpkg-reconfigure locales 

e seguendo le istruzioni.

In alternativa, per impostazioni locali specifiche. Impostare la variabile di ambiente 'LANG' su quella richiesta nello script di servizio del servizio prima di avviare il servizio. Probabilmente esiste un file di configurazione specifico del servizio che puoi anche cercare per mantenere la modifica in caso di aggiornamenti del server web.

+0

Le stesse identiche localizzazioni sono installate su entrambi i sistemi. Sia UTF8 – clarkk

+0

Per chiarire: le impostazioni internazionali del sistema possono essere diverse da quella del server Web o di qualsiasi altro processo correndo sotto Quale metodo hai usato per determinare che entrambi i server web sono in esecuzione come UTF-8? –

-1

tenta di impostare codifica UTF-8 nell'intestazione:

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