一种解决中文URL访问中404错误的方法

昨天完成了一个项目,其中一个是对每一段文字对应的图片的描述,通常的方法是创建一个新的表单,并将图片名称和解释文本记录到数据库中,经过仔细考虑,我觉得这个应用程序不能用数据库来完成。我的解决方案是使用urlencode作为文件名,所以当我读文件,我将驱动文件urldecode驱动图片文字描述后。

但是,找不到文件是通过浏览器访问的图片,如图片和文本的博客,URLEncode生成文件名如下

复制代码代码如下所示:

% % % % E5 E7的公元前90%年8f % % % % 9a 8d B0 E5 E5 % % % a2.jpg AE



所以我通过浏览器访问了图片,暗示我找不到它。



仔细查看,发现当浏览器被访问时,文件名会自动返回到中文中。

火狐







IE



游猎



IE和Safari不见从地址栏中文字符的转移,但也暗示文件无法找到。但我觉得它应该自动转身的时候它是要求,但地址栏不转换后所示。从nginx的访问记录访问图片的请求

复制代码代码如下所示:

192.168.6.30——{ 12 /月/ 2012:10:09:44 + 0800 } / % % % % E5 E7的公元前90%年8f % % % % 9a 8d B0 E5 E5 % % % AE a2.jpg HTTP / 1.1 404199 Mozilla / 5 (兼容;MSIE 9;Windows NT 6.1;MSIE)。



URL请求处理,没发现什么异常,最后通过反复研究文件编码后,由%和字母,我觉得这是浏览器可能会分做其他转换的时候,所以浏览器访问URLEncode未找到文件后。

所以我把所有的文件名中的下划线替换URLEncode的标志

复制代码代码如下所示:

% % % % E5 E7的公元前90%年8f % % % % 9a 8d B0 E5 E5 % % % a2.jpg AE



更换

复制代码代码如下所示:

_e7_90_bc_e5_8f_b0_e5_8d_9a_e5_ae_a2.jpg



重用浏览器访问,解决问题



如果你想得到一张照片的文字,直接将文件名_取代% urldecode可以回来。

最后,注意与Win系统Linux文件名具有相同的长度的限制,最常用的ext3格式,这种格式允许255个字符的长度,约5为延伸后约250余长的纯文件名,经过urlencode汉字是9所以长度,最大可27汉字编码的文件名。

虽然这种方式存储的汉字很少,但我们可以使用一些加密方法获得更短的密文序列。那么我们可以把密文URLEncode,及具体实现方法。