vấn đề mã hóa tên tập tin


9

Tôi đang nhận được một tệp có tên xa và đang cố lưu nó trong tập lệnh PHP:

2010_08_Útflutningur.xls

Trong Ubuntu 10.04 LTS đang lưu nó dưới dạng:

2010_08_�tflutningur.xls (invalid encoding)

Tôi đã cài đặt và chạy utf8-migration-tool, nhưng không có hiệu lực.

Đây có phải là lỗi Ubuntu mà tôi có thể sửa hay tôi chỉ phải từ bỏ và sửa đổi tên trong php?

Có tài liệu nào ghi rõ bộ ký tự được chấp nhận cho tên tệp trong Ubuntu không, hoặc thông số kỹ thuật mã hóa là gì?

Cảm ơn


Làm thế nào bạn nhận và lưu tệp qua PHP? (Mã trông như thế nào?)
Kees Cook

Tôi đã phân tích nó từ một hệ thống email. Mã rất phức tạp :)
Elzo Valugi

một câu hỏi và trả lời tương tự với một kịch bản để sửa chữa tên tập tin bị hỏng.
thắt lưng

Câu trả lời:


5

Điều này trông giống như một vấn đề mã hóa. Thật không may, PHP cần một chút cầm tay khi nói về mã hóa, bởi vì các chuỗi của nó là byte đơn theo mặc định. Nếu bạn đang tạo tên tệp trong PHP, utf8_encode()sẽ hữu ích; tuy nhiên, lưu ý rằng nó giả sử mã hóa ISO-8859-1 cho đầu vào.

Mặt khác, nếu bạn đang sử dụng tên tệp do khách hàng gửi, có lẽ bạn có thể yêu cầu khách hàng thực hiện mã hóa cho bạn. Điều đó được thực hiện với accept-charsetthuộc tính của <form>thẻ và / hoặc bằng cách đặt bộ ký tự của trang có biểu mẫu. Một số khách hàng nhất định có thể sử dụng cái này hoặc cái kia, vì vậy để có kết quả tốt nhất, hãy sử dụng UTF-8 cho mỗi cái.


7

Theo mặc định, Ubuntu sử dụng UTF-8 cho tên tệp. Hầu hết các bản phân phối linux hiện đại và nhiều hệ điều hành khác đều làm như vậy (Windows / NTFS là ngoại lệ được biết đến nhiều nhất với UTF-16).

Để sửa các tệp có tên trong mã hóa sai như tên bạn hiển thị, bạn có thể thử sử dụng nautilus-filename-repairer

sudo apt-get install nautilus-filename-repairer

Bạn có thể sử dụng các iconvhàm PHP để chuyển đổi các chuỗi (tên tệp) từ mã hóa này sang mã hóa khác. Tất nhiên điều đó đòi hỏi bạn phải biết họ đang bắt đầu mã hóa cái gì.

Để có được tên tệp được mã hóa chính xác từ máy khách, bạn có thể thử kỹ thuật được giải thích bởi eswald.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.