2011-09-28 33 views
5

Tôi muốn có thể tạo thư mục cho người dùng đã đăng ký dưới tên của họ. Thông tin của họ được lưu trữ trong db của tôi trong các ký tự Cyrillic và được kéo ra khỏi chúng khi tạo thư mục. Vấn đề là nếu thông tin bằng tiếng Anh mọi thứ đều ổn, nếu trong Cyrillic tôi nhận được một cái gì đó như РљСѓР »СЊС ‡ РјР ° РЅРѕРІР °. Mọi thứ được đặt thành utf-8. Nếu tôi đặt tên thư mục thành i.e 'фыва', nó sẽ không gây ra vấn đề gì.Tạo các thư mục không phải tiếng Anh trong 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.'/'; 

Sẽ đánh giá cao sự giúp đỡ nào

+4

Tôi thực sự mong bạn sử dụng uid thay vì một số chuỗi utf-8 cho tên thư mục. – halfdan

+0

Mô-đun Cơ sở dữ liệu CodeIgniter có xử lý các collations khác nhau trong MySQL không? Công cụ nhiều byte không tự động trong PHP, nếu nó không xử lý đúng cách, nó sẽ làm những việc như thế. – Orbling

+1

Bạn đang ở trên nền tảng nào? Các quy ước tên tệp Windows có thể kỳ lạ và không có mã hóa chuẩn trên bất kỳ nền tảng anyways nào. – phihag

Trả lời

3

Tôi mạnh mẽkhuyên bạn nên sử dụng chỉ ký tự ASCII trong tên thư mục trên máy chủ, hoặc thậm chí tốt hơn: chỉ số, chữ thường, và nhấn mạnh. Sử dụng các ký tự đặc biệt khá luôn luôn mang lại rắc rối, và có vẻ như bạn đã có một số.

Tôi đề nghị bạn đặt tên thư mục là ID người dùng số (chúng chắc chắn có một), đệm bằng số không nếu bạn thấy nó trông đẹp hơn (tất cả các tên đều có độ dài bằng nhau).

+0

ok Tôi sẽ đi với id người dùng ... nhưng còn tên tài liệu thì sao? Người dùng sẽ tải lên tài liệu và đặt tên nó trong biểu mẫu, do đó trong thư mục của mình, tôi muốn xem tên của tài liệu sau khi lưu. (bằng chữ Kirin). nếu tôi đặt tên thủ công nó hoạt động, nhưng không phải khi được lấy từ biểu mẫu – Alanagh

+0

Bạn cũng có thể lưu trữ tên tệp trong DB, trong bảng có ba cột cơ bản (userid, fileid, filename) để bạn có thể nhớ lại thực tế tên từ cơ sở dữ liệu và thay vào đó lấy dữ liệu tệp từ hệ thống tệp. Tôi hiểu nó có vẻ lạ, nhưng đó là cách mọi thứ được thực hiện thực sự. Hãy nghĩ về điều đó: điều gì sẽ xảy ra nếu người dùng tải lên tệp có tên dài hơn mức tối đa cho phép bởi hệ thống tệp máy chủ của bạn? Hoặc với một tên có chứa '..' để nếu bạn nối nó với một số đường dẫn, nó có thể điều hướng lại cấu trúc thư mục của bạn? Quá nhiều thứ cần kiểm tra. – gd1

+0

Thêm, nếu các tệp này đủ nhỏ (vài KB), bạn có thể lưu trữ chúng trong các BLOB. Hãy cẩn thận tuy nhiên, điều này có thể chìm DB của bạn nếu bị lạm dụng. – gd1

Các vấn đề liên quan