2010-03-26 13 views
7

Potrzebuję zapisywać pliki z niepatrzonymi nazwami plików na pliku, używając PHP.Kodowanie systemu plików PHP wykrywające kodowanie

Chcę, aby to działało na różnych platformach. Skąd mam wiedzieć, jakie kodowanie mogę użyć do napisania pliku? Rozumiem, że wiele nowoczesnych systemów plików jest opartych na UTF-8 (czy to prawda?), Ale wątpię, czy Windows XP jest (na przykład).

Czy istnieje zatem solidny mechanizm wykrywania?

+0

Zawsze konwertowałem znaki spoza alfabetu łacińskiego na równoważnik łaciński i usuwaną interpunkcję z nazwy pliku, jeśli piszę plik na dysk. Czy możesz zagwarantować, że twoi użytkownicy będą mieli zainstalowane odpowiednie ustawienia narodowe? –

+0

NTFS (używany w WinXP itp.) Używa utf-16. php 5.x w systemie Windows używa strony kodowej IUSR, np. latin. Słyszałem, że php 6 użyje utf16 na windows – SteelBytes

+0

@Greg K: Projekt, nad którym pracuję, jest serwerem WebDAV, więc potrzebuję czystego mapowania. – Evert

Odpowiedz

5

Brak odpowiedzi na twoje pytanie, ale jeśli nie musisz wykonywać rozległych operacji na poziomie systemu plików (takich jak wyszukiwanie, sortowanie ...), istnieje miłe międzyplatformowe obejście problemu opisanego w this SO question: URLEncode() nazwy plików.

Hörensägen.txt 

zostaje przekształcony

H%c3%b6rens%c3%a4gen.txt 

które powinny być bezpieczne do użycia w dowolnym systemie plików i jest w stanie odwzorować dowolną postać UTF-8.

Uważam, że zdecydowanie lepiej jest próbować "natywnie" radzić sobie z możliwościami systemu operacyjnego, co jest gwarantowane, że jest skomplikowane i podatne na błędy (oprócz różnic w systemie operacyjnym, jestem pewien, że różne formaty systemu plików - FAT16 , FAT32, NTFS, extFS wersje 1/2/3 .... przynieść własny zestaw reguł, aby być świadomym.)

+0

Niezła sugestia. Przypuszczam, że mógłbym podać opcję. Pytanie, które łączysz, wspomina również, że Windows używa ISO-8859-1. – Evert

+0

@Nie zwracaj się dokładnie, obsługa ciągów Windows została napisana w formacie UTF-16 przez długi czas, o ile wiem, odpowiedź twierdzi, że funkcje * systemu plików * Windows w systemie Windows korzystają z ISO-8859-1. Nie wiem na pewno, czy to prawda, ale jest to możliwe. –

-2

Nie jest to odpowiedź, ale ... WinXP jest oparty na UTF-8 (według Jeffrey'a Książka "CLR przez C#" Richtera i wszystkie funkcje WinAPI ASCII to tylko opakowania dla podobnych UTF-8.

+4

'WinXP jest oparty na UTF-8'. cała rodzina WinNT jest zbudowana na utf-16 (no dobrze - prawie prawda, wcześniej nt nie obsługuje surogatów) – SteelBytes

+0

Och, naprawdę przepraszam. Wpisałem to bez myślenia o "..- 8" – kpower