Tôi mã hóa tên tệp và gửi nó làm một phần của URL như /rest/get?name=Filename.txt
. Trong JS xây dựng liên kết là đơn giản nhưHành vi khác của encodeURIComponent() trong Firefox chỉ
url = '/rest/get?name=' + window.encodeURIComponent(file.name);
Nó hoạt động tốt đối với trường hợp đơn giản nhưng để thử nghiệm Hardcore tôi sử dụng một tập tin có tên
你好abcABCæøåÆØÅäöüïëêîâéíáóúýñ½§!#¤%&()=`@£$€{[]}+´¨^~'-_,;.txt
Sau khi mã hóa URI Tôi hy vọng sẽ nhận được một liên kết
/rest/get?name=%E4%BD%A0%E5%A5%BDabcABC%C3%A6%C3%B8%C3%A5%C3%86%C3%98%C3%85%C3%A4%C3%B6%C3%BC%C3%AF%C3%AB%C3%AA%C3%AE%C3%A2%C3%A9%C3%AD%C3%A1%C3%B3%C3%BA%C3%BD%C3%B1%C2%BD%C2%A7%3F%3FabcABC%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD!%23%C2%A4%25%26()%3D%60%40%C2%A3%24%E2%82%AC%7B%5B%5D%7D%2B%C2%B4%C2%A8%5E~%27-_%2C%3B.txt
Và tôi hiểu rồi. Liên kết được xây dựng hoạt động tốt trong các phiên bản mới nhất của IE và Chrome nhưng không thành công trong Firefox. Sau một số điều tra, tôi thấy rằng trong Firefox encodeURIcomponent
hoạt động khác nhau. Dưới đây là kết quả thực tế trong Firefox:
/rest/get?name=%3F%3FabcABC%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD%EF%BF%BD!%23%EF%BF%BD%25%26%28%29%3D%60%40%EF%BF%BD%24%3F{[]}%2B%EF%BF%BD%EF%BF%BD^~%27-_%2C%3B.txt
trực quan so sánh (liên kết Chrome là ở bên trái và Firefox liên kết là ở bên phải):
Tôi cũng đã cố gắng để sao chép và dán liên kết hợp lệ (được xây dựng trong Chrome) với Firefox và nó hoạt động tốt.
Tại sao tôi nhận được kết quả khác?
nó là một lỗi với ̶ ̶e̶n̶c̶o̶d̶e̶U̶R̶I̶c̶o̶m̶p̶o̶n̶e̶n̶t̶(̶)̶
̶ trong Firefox? ̶
Liệu Firefox sử dụng một mã hóa khác nhau trong encodeURIComponent()
?
UPD. Tôi đã tìm thấy các câu hỏi tương tự (encodeURIComponent behaves differently in browsers for China as location [搜索] và encodeURIComponent difference with browsers and ä-ö-å characters [äöå]), cả hai đều không có câu trả lời.
UPD.2 Tiếp tục điều tra đã chỉ ra rằng các ký tự sau được mã hóa khác nhau và gây 'tập tin không tìm thấy' ngoại lệ trên máy chủ:
- 你好
- æøåÆØÅäöüïëêîâéíáóúýñ
- ½§¤
- £ €
tôi sẽ đoán rằng nó là một trong hai rằng FireFox bản đồ phông chữ là khác nhau, hoặc bất cứ điều gì FF sử dụng cho một thông dịch viên JavaScript là ra của Whack. – durbnpoisn
'% 3F' là'? ', Có vẻ như nó không hiểu chính xác unicode. –
@ JamesThorpe vâng, bạn nói đúng. Nhưng như bạn có thể thấy một phần khác của URL được mã hóa khác nhau và nếu tôi loại bỏ '你好' từ đầu nó vẫn không thành công. – naXa