昨天做一个项目,其中有一个需求是每一张图片对应一小段文字对图片的说明,普通的做法是新建一个表然后把图片名与说明文字都记录到数据库内。仔细考虑后感觉这个应用不要数据库也能完成,我实现的方案是把说明文字urlencode后当做文件名,这样当我读取文件的时候再把文件名urldecode就可以后驱图片的文字说明了。
可是通过浏览器访问图片时却提示找不到文件,如有一张图片的说明文字为“琼台博客”,urlencode后生成的文件名如下
复制代码 代码如下:
%e7%90%bc%e5%8f%b0%e5%8d%9a%e5%ae%a2.jpg
于是我通过浏览器访问图片,提示找不到
仔细看了一下,发现浏览器访问的时候自动把文件名给转回中文了
火狐
chrome
ie
safari
ie与safari从地址栏上没有看出转为汉字,但也同样都提示找不2021年开学第一课读后感到文件。但我感觉应该是它请求的时候也都自动转了,只不过地址栏上的没有显示转换后的。从nginx的访问记录看访问图片时的请求情况
复制代码 代码如下:
192.168.6.30走进鲁迅 – – [12/oct/2012:10:09:44 +0800] “get /%e7%90%bc%e5%8f%b0%e5%8d%9a%e5%ae%a2.jpg http/1.1” 404 199 “-” “mozilla/5.0 (compatible; msie 9.0; windows nt 6.1; trident/5.0)”
请求url处理没发现什么异常,最后通过反复研究编码后的文件名,发现都是由百分号与字母数字组成,我感觉应该是浏览器在遇到百分号时可能会做些其它转换处理了,所以导致浏览器访问urlencode后的文件提示找不到。
于是我把所有urlencode后的文件名里的百分号都用下划线替换
复制代码 代码如下:
%e7%90%bc%e5%8f%b0%e5%8d%9a%e5%ae%a2.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即可,具体实现方式我就不一一举例,动手做做思考一下吧!
本文发布于:2023-04-06 21:56:44,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/489e958e3b5cc7d634a6c6ebd5e188de.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:访问编码后的中文URL返回404错误的解决方法.doc
本文 PDF 下载地址:访问编码后的中文URL返回404错误的解决方法.pdf
留言与评论(共有 0 条评论) |