2009-05-17 7 views
5

Se scrivo:non rinominare supporto caratteri multi-byte

rename('php109.tmp','test.jpg'); 

allora va bene e di lavoro.

ma se cambio in:

rename('php109.tmp','中文.jpg'); 

che sarà riferire

"No such file or directory ...".

Ma se i caratteri multi-byte possono essere scritti nel database, possono essere letti, quindi perché non riesce quando viene rinominato?

+0

il sistema operativo o il filesystem supporta nomi di file multibyte? – garrow

+0

sì, e qui sono ulteriori informazioni: è gestito quando si invia dalla pagina web, codifica della pagina utf8 codifica db è utf8. e ho scaricato la stringa solo per scoprire che è anche utf8 – omg

+0

Quale sistema operativo stai usando? L'ho provato su FreeBSD 4.11, Debian 5.0 e OS X 10.6.2, senza errori. Se si utilizza un sistema operativo con una sorta di funzione di traccia di syscall, si può provare a abilitarlo? –

risposta

-1

Sono quasi sicuro che mbstring non ha nulla a che fare con questo specifico problema, penso che il problema qui si basi sulla codifica del file .php.

Provare a modificare la codifica del file in UTF-8 (senza distinta materiali!) Nell'editor di codice.

+0

ma il file è già codificato utf8 .. – omg

0

I file system non utilizzano necessariamente UTF-8. Per esempio, questo è quello che dice Wikipedia NTFS:

NTFS consente a qualsiasi sequenza di 16 bit valori per la codifica nome (nomi di file, ruscello, nomi degli indici, etc.). Questo significa sono supportati UTF-16 codepoints, ma il file system non controlla se una sequenza è valido UTF-16 (si consente a qualsiasi sequenza di valori brevi, non limitati a quelli nello standard Unicode ).

Potrebbe essere necessario utilizzare iconv() per convertire tra i set di caratteri.

0

Hai provato a fare un setlocale(LC_ALL, array("es_ES.utf-8","[email protected]",'es_ES')); o qualsiasi sia il tuo codice paese, per assicurarti che le impostazioni internazionali siano impostate correttamente?

Se questa chiamata non restituisce qualcosa con "utf-8" al suo interno, significa che non è riuscita e restituirà quindi le impostazioni internazionali correnti.

0

Questo esempio dovrebbe aiutare, è necessario trovare la pagina del codice lingua e sostituirla. Verifica il codice muggito e funziona in Windows per arabo/nomi persiano:

$newname = iconv("utf-8", "cp1256","گچپژ"); 
echo rename("1.txt", $newname);