访问编码后的中文URL返回404错误的解决方法
2014-08-20 00:00
507 查看
昨天做一个项目,其中有一个需求是每一张图片对应一小段文字对图片的说明,普通的做法是新建一个表然后把图片名与说明文字都记录到数据库内。仔细考虑后感觉这个应用不要数据库也能完成,我实现的方案是把说明文字URLENCODE后当做文件名,这样当我读取文件的时候再把文件名URLDECODE就可以后驱图片的文字说明了。
可是通过浏览器访问图片时却提示找不到文件,如有一张图片的说明文字为“琼台博客”,URLENCODE后生成的文件名如下
于是我通过浏览器访问图片,提示找不到
仔细看了一下,发现浏览器访问的时候自动把文件名给转回中文了
火狐
chrome
IE
Safari
IE与Safari从地址栏上没有看出转为汉字,但也同样都提示找不到文件。但我感觉应该是它请求的时候也都自动转了,只不过地址栏上的没有显示转换后的。从Nginx的访问记录看访问图片时的请求情况
请求URL处理没发现什么异常,最后通过反复研究编码后的文件名,发现都是由百分号与字母数字组成,我感觉应该是浏览器在遇到百分号时可能会做些其它转换处理了,所以导致浏览器访问URLENCODE后的文件提示找不到。
于是我把所有URLENCODE后的文件名里的百分号都用下划线替换
替换为
重新使用浏览器访问,问题解决
如要获取图片的文字说明,直接把文件名的“_”替换回"%”再使用URLDECODE即可。
最后需要注意的是,Linux下文件名跟Win系统一样都有长度限制,目前最常用的格式为ext3,这中格式允许255个字符长度,扣除大约5个作为拓展名后大约剩余250个长度纯文件名,而一个汉字经过URLENCODE后的长度为9个,因此最大可以编码27个汉字做为文件名。
虽然这种方式存储的汉字比较少,但可以利用一些加密方法获得较短的一串密文,再把这段密文URLENCODE即可,具体实现方式我就不一一举例,动手做做思考一下吧!
可是通过浏览器访问图片时却提示找不到文件,如有一张图片的说明文字为“琼台博客”,URLENCODE后生成的文件名如下
%E7%90%BC%E5%8F%B0%E5%8D%9A%E5%AE%A2.jpg
于是我通过浏览器访问图片,提示找不到
仔细看了一下,发现浏览器访问的时候自动把文件名给转回中文了
火狐
chrome
IE
Safari
IE与Safari从地址栏上没有看出转为汉字,但也同样都提示找不到文件。但我感觉应该是它请求的时候也都自动转了,只不过地址栏上的没有显示转换后的。从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即可,具体实现方式我就不一一举例,动手做做思考一下吧!
相关文章推荐
- 访问编码后的中文URL返回404错误的解决方法
- http get 请求地址传中文或值带特殊符号解决方法 URLEncoder.encode(str,"编码") new URLDecoder().decode(str,"编码")
- restsharp 组件调用返回 gbk 编码的api,中文乱码解决方法。(restsharp response 中文乱码 gbk)
- 配置NGINX支持中文URL 中文文件名或目录404无法访问的解决方法
- php json_encode url链接出现双转义字符‘\\’和中文被编码的解决方法
- javascript通过url向jsp页面传递中文参数乱码解决方法(两次编码,一次解码)
- 浏览器地址传中文解决方法 URLEncoder.encode(str,"编码") new URLDecoder().decode(str,"编码")
- MySQL5.0中文问题及JSP汉字编码问题解决方法
- .net调用别人的http页面,返回结果,url中有中文的处理,get和post两种方法
- MySQL5.0中文问题及JDBC数据库连接和JSP汉字编码问题解决方法总结
- IE下AJAX中文返回乱码的解决方法
- javascript通过url向jsp页面传递中文参数乱码解决方法
- (转)MySQL5.0中文问题及JDBC数据库连接和JSP汉字编码问题解决方法总结
- [CCS]China Community Server几乎所有被重写的URL都无法访问的解决方法
- SVN+Apache在windows下http访问 显示中文乱码问题的解决方法
- IIS不支持含中文汉字的url解决方法
- htaccess Rewrite中文编码问题解决方法
- [ASP/PHP/JSP]MySQL5.0中文问题及JDBC数据库连接和JSP汉字编码问题解决方法总结
- 中文编码问题解决方法汇总
- MySQL5.0中文问题及JDBC数据库连接和JSP汉字编码问题解决方法总结