宝哥软件园

访问编码中文网址返回404错误的解决方案

编辑:宝哥软件园 来源:互联网 时间:2021-10-07

我昨天做了一个项目。其中一个要求是每张图片对应一小段文字来解释图片。通常的做法是创建一个新表,然后将图片名称和描述文本记录到数据库中。仔细考虑了一下,觉得这个应用不用数据库也能完成。我实现的方案是使用解释文本URLENCODE作为文件名,这样在读取文件时,就可以使用文件名urlendecode来驱动图片的文本描述。

但是,当您通过浏览器访问图片时,系统会提示您找不到该文件。如果有标题为“琼台博客”的图片,URLENCODE后生成的文件名如下。

复制代码如下:琼台blog.jpg。

于是我通过浏览器访问了图片,提示我找不到。

仔细看了一下,发现浏览器访问时,文件名会自动调回中文。

赤狐

工业管理学(Industrial Engineering)

旅行队

IE和Safari没有看到从地址栏转换成汉字,但都表示找不到文件。不过我感觉是请求时自动转的,只是地址栏里的那个没有显示转换后的那个。从Nginx的访问记录中查看访问图片的请求。

复制的代码如下:192 . 168 . 6 . 30-[12/oct/2012:1033609336044 0800]' get/琼台blog.jpg http/1.1 ' 404199 '-' ' Mozilla/5.0(兼容。MSIE 9.0Windows NT 6.1三叉戟/5.0)'

URL处理没有异常。最后反复研究编码后的文件名,发现都是由百分号和字母数字组成的。感觉浏览器在遇到百分制的时候可能会做一些其他的转换处理,导致浏览器访问URLENCODE后的文件提示找不到。

所以我用下划线替换了URLENCODE之后所有文件名中的百分号。

复制代码如下:琼台blog.jpg。

用…替换

复制的代码如下: _ E7 _ 90 _ BC _ E5 _ 8f _ B0 _ E5 _ 8d _ 9a _ E5 _ AE _ a2.jpg。

重新使用浏览器访问并解决问题。

要获取图片的文本描述,直接将文件名的“_”替换为“%”,然后使用URLDECODE。

最后需要注意的是,Linux下的文件名和Win系统下的文件名有相同的长度限制。目前最常用的格式是ext3,允许长度为255个字符。扣除约5个作为扩展名后,有长度的纯文件名约有250个,而URLENCODE后的一个汉字长度为9,因此最多可以编码27个汉字作为文件名。

虽然以这种方式存储的汉字很少,但是可以使用一些加密方法来获得一个短序列的密文,然后这个密文就可以是URLENCODE。具体的实现方法我就不举例了。让我们去做,去思考!

更多资讯
游戏推荐
更多+