ปัญหาการเข้ารหัสชื่อไฟล์


9

ฉันได้รับไฟล์ชื่อ Faroese และพยายามบันทึกไว้ในสคริปต์ PHP:

2010_08_Útflutningur.xls

ใน Ubuntu 10.04 LTS กำลังบันทึกเป็น:

2010_08_�tflutningur.xls (invalid encoding)

ฉันติดตั้งและเรียกใช้utf8-migration-toolแล้ว แต่ไม่มีผลใด ๆ

นี่เป็นข้อผิดพลาดของ Ubuntu ที่ฉันสามารถแก้ไขได้หรือฉันต้องยกเลิกและแก้ไขชื่อใน php หรือไม่

มีเอกสารที่ระบุชุดอักขระที่ยอมรับได้สำหรับชื่อไฟล์ใน Ubuntu หรืออะไรคือสเป็คการเข้ารหัส?

ขอบคุณ


คุณจะรับและบันทึกไฟล์ผ่าน PHP ได้อย่างไร? (โค้ดมีลักษณะอย่างไร)
Kees Cook

ฉันแยกวิเคราะห์จากระบบอีเมล รหัส :) ซับซ้อน
Elzo Valugi

มีคำถามและคำตอบที่คล้ายกันพร้อมสคริปต์เพื่อซ่อมแซมชื่อไฟล์ที่เสียหาย
lumbric

คำตอบ:


5

ดูเหมือนว่าปัญหาการเข้ารหัส น่าเสียดายที่ PHP ต้องการบิตของการจับมือเมื่อมันมาถึงการเข้ารหัสเนื่องจากสตริงนั้นเป็นไบต์เดียวโดยค่าเริ่มต้น หากคุณกำลังสร้างชื่อไฟล์ภายใน PHP utf8_encode()ควรมีประโยชน์ อย่างไรก็ตามโปรดทราบว่าจะถือว่าการเข้ารหัส ISO-8859-1 สำหรับอินพุต

ในทางกลับกันหากคุณใช้ชื่อไฟล์ที่ลูกค้าส่งมาบางทีคุณสามารถขอให้ไคลเอนต์ทำการเข้ารหัสให้คุณได้ ที่ทำกับaccept-charsetแอตทริบิวต์ของ<form>แท็กและ / หรือโดยการตั้งค่าชุดอักขระของหน้าเว็บที่เปิดใช้งานฟอร์ม ลูกค้าบางรายอาจใช้อย่างใดอย่างหนึ่งเพื่อให้ได้ผลลัพธ์ที่ดีที่สุดให้ใช้ UTF-8 สำหรับลูกค้าแต่ละราย


7

ตามค่าเริ่มต้น Ubuntu จะใช้ชื่อไฟล์ UTF-8 ลินุกซ์ distros ที่ทันสมัยและระบบปฏิบัติการอื่น ๆ (Windows / NTFS เป็นข้อยกเว้นที่รู้จักกันดีที่สุดกับ UTF-16)

หากต้องการแก้ไขไฟล์ที่มีชื่อในการเข้ารหัสผิดเหมือนที่คุณแสดงคุณสามารถลองใช้งานได้ nautilus-filename-repairer

sudo apt-get install nautilus-filename-repairer

คุณสามารถใช้iconvฟังก์ชันPHP เพื่อแปลงสตริง (ชื่อไฟล์) จากการเข้ารหัสหนึ่งไปเป็นอีกอัน แน่นอนว่าคุณต้องรู้ว่าการเข้ารหัสเริ่มต้นด้วยอะไร

หากต้องการรับชื่อไฟล์ที่เข้ารหัสอย่างถูกต้องจากไคลเอนต์คุณสามารถลองใช้เทคนิคที่อธิบายโดย eswald

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.