Hangi karakterler sakınmalısınız / dosya adları için sterilize?

6 Cevap

Ben dosya adları kullanılacak bazı verileri sterilize etmek gerekir. Bazı veri boşlukları ve imi karakterler içerir. Bir dosya adı (veya yolu) kullanarak uygun veri kaçmak ya da sterilize edecek bir işlevi var mı? Ben PHP kılavuzun 'Dosya Sistemi Function' bölümünde bulamadı.

Yani, ben kaçmak (veya değiştirmek) gerekiyor karakterler kendi işlevi, yazmak zorunda varsayarsak?

6 Cevap

Bir veritabanında orijinal adını saklamak için fırsat varsa ben sadece rastgele karma (mt_rand () / MD5/SHA1) ile bir dosya yaratacak. Yararı temel OS (karakter / yol uzunluğu), değer veya kullanıcı girişi uzunluğuna güvenmeyin ve ayrıca bir dosya adı oluşturmak / tahmin etmek gerçekten zor olurdu. Belki de bir base64 kodlama bir seçenektir.

Windows için:

/ \ : * ? " < > |

Unix için, teknik olarak bir şey, ama pratikte, Windows gibi aynı liste mantıklı olacaktır.

Boşluk ya da 'işareti ile yanlış bir şey sürece size dosyaları işlemek yaparken komut satırları üzerinde tırnak kullanmaya hazır konum olarak var.

(BTW, ben hata mesajı bir kolon ve kopyalama gibi bir şey Windows üzerinde bir dosyayı yeniden adlandırmak için deneyerek bu listeyi aldım.)

Bunun yerine karakterler neden sadece izin vermez filtreleme [a-z0-9- !@#$%^()]? Kesinlikle potansiyel sorunlara neden olabilecek her karakteri tahmin etmeye çalışırken daha kolaydır.

Kullanıcıların doğru, zaten herhangi bir diğer karakterler ile bir dosya gerekmez?

It might be a good idea to remove everything outside [a-z0-9_\-.]. It's not necessary to be this strict, but it's comfortable to have a directory listing without any surprises. If you're working with some weird character sets, then you maybe want to convert the encoding to flat ascii before removing the offending characters (or you might end up with deleting everything) ...

en azından :-) ben bunu nasıl

Dosya için dizeleri sanitasyon, biz 0x20 aşağıdaki tüm karakterler filtre yanı sıra, <>,:? ", /, \, |, Ve *

Windows için, eklemek "&" Listeye, sen-herhangi bir yan etkisi istemiyorsanız. Bu verilerin, bazı görüntüler "sonraki karakter benim kısayol tuşları" diyor karakter. (En eski Windows ortak, ama yine de. Orada burada açılır) Yani "M & M" sen "M mikrom" görürdük yerine ... işareti (boşluk) izleyen karakter "kısayol" dir ve böylece altını çizdi.