鍍金池/ 問答/PHP  Python  Linux/ 包含中文字符url訪問服務(wù)器中文文件名資源

包含中文字符url訪問服務(wù)器中文文件名資源

describle

環(huán)境:PHP + Nginx
服務(wù)器為Ubuntu10,字符編碼為utf-8.
現(xiàn)在我有些資源文件是中文名,通過url訪問這些資源文件(Nginx服務(wù)器配置靜態(tài)文件)。

服務(wù)器腳本通過header函數(shù)設(shè)置瀏覽器編碼為utf-8

例子:http://images.61duocai.com/flash/xueshuxue/統(tǒng)一測量標(biāo)準(zhǔn).swf,但是該文件報(bào)個404 not found.

try

然后我做了以下處理:使用 iconv函數(shù)和mb_convert_encoding,把這個中文文件名轉(zhuǎn)成gb2312.

但是一打印成這樣:

http://images.61duocai.com/flash/xueshuxue/?????????.swf.

我期望的應(yīng)該是這樣:

http://images.61duocai.com/flash/xueshuxue/í3ò?2aá?±ê×?.swf

question

對于使用包含中文的url訪問資源,你們提供一些思路嗎?
其實(shí)我很想知道為什么我將中文轉(zhuǎn)換成了gb2312,HTML charset也設(shè)置成了utf-8形式,最終的結(jié)果不是預(yù)期的那樣,感覺像是又搞了一次編碼。為什么會這樣?
謝謝。

補(bǔ)充內(nèi)容

我已經(jīng)嘗試過urlencode,分別對
http://images.61duocai.com/flash/xueshuxue/?????????.swf

http://images.61duocai.com/í3ò?2aá?±ê×?.swf

進(jìn)行編碼結(jié)果是一樣,但是最終還是訪問不到服務(wù)器資源,因?yàn)榉?wù)器最終還是會對url解碼的。

Append:

我現(xiàn)在想知道í3ò?2aá?±ê×?這種是什么編碼?

我的處理方式

設(shè)置無語言編碼
LC_ALL=C
7z解壓
然后convmv批量改名

回答
編輯回答
淡墨

urlencode

2017年4月19日 09:34
編輯回答
下墜

不應(yīng)該轉(zhuǎn)換為GB2312,因?yàn)長inux默認(rèn)的系統(tǒng)編碼是UTF-8。全程都是UTF-8,應(yīng)該沒問題的。你在客戶端抓一下包(開發(fā)人員工具就行),看看服務(wù)器返回的HTTP標(biāo)頭有沒有encoding,URL編碼成了什么。網(wǎng)頁里的Meta和服務(wù)器腳本都應(yīng)該設(shè)置Charset。

2017年3月13日 21:14
編輯回答
鐧簞噯

你既然在Linux下跑,就意味著環(huán)境就是UTF-8,所以也不必在服務(wù)器側(cè)轉(zhuǎn)換,你需要做的只是讓客戶端請求正確的,中文部分經(jīng)過編碼的url

我猜樓主更有可能是從Win下拷過去的文件,win 下的文件名是GBK,需要使用支持轉(zhuǎn)換的FTP工具。我推薦使用XFTP,在工具欄可以選擇語言模式,復(fù)制文件前選擇Unicode即可解決

2017年8月18日 04:17
編輯回答
挽青絲

盡量不要用中文名。。

2017年6月10日 14:59
編輯回答
心夠野

最后的解決方案,批量處理服務(wù)器上的中文名稱,轉(zhuǎn)成拼音。

2018年4月8日 20:57
編輯回答
終相守

這個有時候是瀏覽器設(shè)置,要求瀏覽器以utf-8發(fā)送url,此外還要自動進(jìn)行urlencode

2017年12月24日 22:01
編輯回答
神經(jīng)質(zhì)
%e7%bb%9f%e4%b8%80%e6%b5%8b%e9%87%8f%e6%a0%87%e5%87%86.swf
2017年12月16日 02:37