Web-Server

如何使用特殊字元提供 HTTP 文件名?

  • June 23, 2010

以如下部落格頁面為例:

http://www.roney.com.br/2010/06/20/estados-do-brasil-um-pais-que-precisa-se-unir/

!小心,它嵌入了大量的 youtube,因此載入緩慢!這是一個巴西網頁,用葡萄牙語編寫,但託管在美國網路主機上(根據部落格所有者的說法)。

有趣的是“Pronúncia”連結,它們連結到包含非 ascii 字元的文件名。看看第二個(對於 Pará):我寫的連結是 www.roney.com.br/wp-content/uploads/2010/06/par%E1.mp3(除非他從我下面把它改了未來 :)!))

如您所見,他已對其進行了編碼,但您不知道他在文件系統上實際命名它的名稱或他們擁有的系統配置。

如果我在 Firefox 瀏覽器中點擊它,我會得到他們的 404 頁面。他聲稱這些連結適用於巴西遊客。我認為這是一個 100% 伺服器的事情,即伺服器將提供它或它不會。只是為了笑,我在我的 Firefox 中將首選語言設置為葡萄牙語,但正如我所懷疑的那樣,它沒有任何區別。

任何人都願意提供任何關於這在巴西如何工作但在美國不適用的見解,或者我會在我自己的工作站上調整哪些東西,以便它們也能為我服務。

問題在於 URI 編碼。這裡它被編碼為 iso-8859-1 (latin-1)(然後是百分比編碼),但RFC 3986聲明它應該被編碼為 UTF-8(然後是百分比編碼)。

資源:

有關wikipedia 上百分比編碼的更多資訊。

實際的RFC 3986

解決方案:

為了讓您了解如何解決這個問題,您可以在 PHP 中執行類似的操作。

<?php
echo urlencode(utf8_encode(urldecode('par%E1.mp3')));
?>

請注意,如果您輸入整個 URI,斜杠 (/) 也會被編碼,從而使 URI 無效。

引用自:https://serverfault.com/questions/153826