2011-09-28 12 views
5

Chcę móc tworzyć foldery dla zarejestrowanych użytkowników pod ich nazwami. Ich informacje są przechowywane w mojej db w cyrylicy znaków i wyciągnął z ich przy tworzeniu folderu. Chodzi o to, że jeśli informacje są w języku angielskim, wszystko jest w porządku, jeśli w cyrylicy dostaję coś w stylu РљСѓР »СЊС ‡ РјР ° РЅРшРІР °. Wszystko jest ustawione na UTF-8. Jeśli ustawię nazwę folderu na np. "Фыва", nie stwarza to problemu.Tworzenie nieangielskojęzycznych katalogów w PHP

 $this->load->model('users_model'); 
    $i=$this->session->userdata('uid'); 
    $new_name=$this->input->post('doc_name'); 
    $folder=$this->users_model->getFullName($i); //$folder='фыва' works fine 

    if(!is_dir("./uploads/".$folder)){ 
     mkdir("./uploads/".$folder , 0777); 
    } 
    $config['file_name'] = $new_name; 
    $config['upload_path'] = './uploads/'.$folder.'/'; 

docenią jakiejkolwiek pomocy

+4

Naprawdę zachęcam do użycia nazwy UID zamiast nazwy utf-8 dla nazw folderów. – halfdan

+0

Czy moduł bazy danych CodeIgniter obsługuje różne sortowania w MySQL? Multibajt nie jest automatyczny w PHP, jeśli nie obsługuje go poprawnie, zrobi coś takiego. – Orbling

+1

Na jakiej platformie jesteś? Konwencje nazw plików Windows mogą być dziwaczne i nie ma standardowego kodowania na żadnej platformie. – phihag

Odpowiedz

3

I silnie zalecamy użycie tylko zwykłe znaki ASCII w nazwach katalogów na serwerach, albo jeszcze lepiej: tylko cyfry, małe litery i podkreślenia. Używanie znaków specjalnych zawsze przynosi kłopoty i wydaje się, że już je masz.

Proponuję nazwać katalog jako numeryczny identyfikator użytkownika (na pewno go mają), wypełniając zerami, jeśli okaże się, że wygląda lepiej (wszystkie nazwy mają taką samą długość).

+0

ok Pójdę z identyfikatorami użytkownika ... ale co z nazwą dokumentu? Użytkownik prześle dokument i nadmieni go w formularzu, dlatego w jego folderze chcę zobaczyć nazwę dokumentu po zapisaniu. (w cyrylicy). jeśli ustawię nazwę ręcznie, to działa, ale nie po pobraniu z formularza – Alanagh

+0

Można również zapisać nazwy plików w bazie danych, w tabeli z zasadniczo trzema kolumnami (identyfikator_użytkownika, nazwa_pliku, nazwa pliku), aby można było nazwę z bazy danych, a zamiast tego pobierz dane pliku z systemu plików. Rozumiem, że to wygląda dziwacznie, ale tak właśnie się dzieje. Zastanów się: co się stanie, jeśli użytkownik prześle plik o nazwie dłuższej niż maksymalna dozwolona przez system plików serwera? Lub z nazwą zawierającą "..", więc jeśli połączysz ją z jakąś ścieżką, może ona z powrotem nawigować po strukturze katalogów? Za dużo rzeczy do sprawdzenia. – gd1

+0

Co więcej, jeśli pliki są wystarczająco małe (kilka KB), można je przechowywać w obiektach BLOB. Bądź jednak ostrożny, może to zatopić twój DB, jeśli jest nadużywany. – gd1

Powiązane problemy