访问编码后的中文URL返回404错误的解决方法


Posted in PHP onAugust 20, 2014

昨天做一个项目,其中有一个需求是每一张图片对应一小段文字对图片的说明,普通的做法是新建一个表然后把图片名与说明文字都记录到数据库内。仔细考虑后感觉这个应用不要数据库也能完成,我实现的方案是把说明文字URLENCODE后当做文件名,这样当我读取文件的时候再把文件名URLDECODE就可以后驱图片的文字说明了。

可是通过浏览器访问图片时却提示找不到文件,如有一张图片的说明文字为“琼台博客”,URLENCODE后生成的文件名如下

%E7%90%BC%E5%8F%B0%E5%8D%9A%E5%AE%A2.jpg

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

访问编码后的中文URL返回404错误的解决方法

仔细看了一下,发现浏览器访问的时候自动把文件名给转回中文了

火狐

访问编码后的中文URL返回404错误的解决方法

chrome

访问编码后的中文URL返回404错误的解决方法

IE

访问编码后的中文URL返回404错误的解决方法

Safari

访问编码后的中文URL返回404错误的解决方法

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

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

访问编码后的中文URL返回404错误的解决方法

如要获取图片的文字说明,直接把文件名的“_”替换回"%”再使用URLDECODE即可。

最后需要注意的是,Linux下文件名跟Win系统一样都有长度限制,目前最常用的格式为ext3,这中格式允许255个字符长度,扣除大约5个作为拓展名后大约剩余250个长度纯文件名,而一个汉字经过URLENCODE后的长度为9个,因此最大可以编码27个汉字做为文件名

虽然这种方式存储的汉字比较少,但可以利用一些加密方法获得较短的一串密文,再把这段密文URLENCODE即可,具体实现方式我就不一一举例,动手做做思考一下吧!

PHP 相关文章推荐
PHP的栏目导航程序
Oct 09 PHP
php mssql 日期出现中文字符的解决方法
Mar 10 PHP
php 字符转义 注意事项
May 27 PHP
处理php自动反斜杠的函数代码
Jan 05 PHP
PHP 字符串长度判断效率更高的方法
Mar 02 PHP
WordPress中调试缩略图的相关PHP函数使用解析
Jan 07 PHP
php将文件夹打包成zip文件的简单实现方法
Oct 04 PHP
PHP图像处理技术实例总结【绘图、水印、验证码、图像压缩】
Dec 08 PHP
php快速导入大量数据的实例方法
Sep 23 PHP
Laravel框架表单验证操作实例分析
Sep 30 PHP
TP5框架实现自定义分页样式的方法示例
Apr 05 PHP
PHP实现考试倒计时功能代码
Apr 16 PHP
PHP中使用localhost连接Mysql不成功的解决方法
Aug 20 #PHP
Smarty变量调节器失效的解决办法
Aug 20 #PHP
PHP编译安装中遇到的两个错误和解决方法
Aug 20 #PHP
PHP基于数组实现的分页函数实例
Aug 20 #PHP
PHP中读取照片exif信息的方法
Aug 20 #PHP
PHP函数eval()介绍和使用示例
Aug 20 #PHP
PHP命令行脚本接收传入参数的三种方式
Aug 20 #PHP
You might like
set_include_path和get_include_path使用及注意事项
2013/02/02 PHP
php简单日历函数
2015/10/28 PHP
一段多浏览器的"复制到剪贴板"javascript代码
2007/03/27 Javascript
静态页面下用javascript操作ACCESS数据库(读增改删)的代码
2007/05/14 Javascript
javascript事件模型代码
2007/07/01 Javascript
jQuery 事件队列调整方法
2009/09/18 Javascript
javascript面向对象的方式实现的弹出层效果代码
2010/01/28 Javascript
解析Jquery的LigerUI如何实现文件上传
2013/07/09 Javascript
Javascript中call和apply函数的比较和使用实例
2015/02/03 Javascript
JavaScript通过事件代理高亮显示表格行的方法
2015/05/27 Javascript
jQuery遮罩层效果实例分析
2016/01/14 Javascript
基于javascript bootstrap实现生日日期联动选择
2016/04/07 Javascript
关于动态执行代码(js的Eval)实例详解
2016/08/15 Javascript
JS实现移动端判断上拉和下滑功能
2017/08/07 Javascript
为vue-router懒加载时下载js的过程中添加loading提示避免无响应问题
2018/04/03 Javascript
vue实现随机验证码功能(完整代码)
2019/12/10 Javascript
JS常见内存泄漏及解决方案解析
2020/05/30 Javascript
Vue如何跨组件传递Slot的实现
2020/12/14 Vue.js
Python映射拆分操作符用法实例
2015/05/19 Python
Python IDLE 错误:IDLE''s subprocess didn''t make connection 的解决方案
2017/02/13 Python
Python实现的堆排序算法原理与用法实例分析
2017/11/22 Python
Tensorflow加载预训练模型和保存模型的实例
2018/07/27 Python
Python使用sorted对字典的key或value排序
2018/11/15 Python
Numpy 中的矩阵求逆实例
2019/08/26 Python
python中读入二维csv格式的表格方法详解(以元组/列表形式表示)
2020/04/24 Python
python百行代码自制电脑端网速悬浮窗的实现
2020/05/12 Python
python3中布局背景颜色代码分析
2020/12/01 Python
纽约JewelryAffairs珠宝店:精细金银时尚首饰
2017/02/05 全球购物
澳大利亚在线生活方式商店:Mytopia
2018/07/08 全球购物
英国床垫和床架购物网站:Bedman
2019/11/04 全球购物
shell程序中如何注释
2012/01/28 面试题
内部类的定义、种类以及优点
2013/10/16 面试题
编辑找工作求职信分享
2014/01/03 职场文书
学校纪律作风整改措施思想汇报
2014/10/11 职场文书
MySQL 分区表中分区键为什么必须是主键的一部分
2022/03/17 MySQL
Win11自动黑屏怎么办 Win11自动黑屏设置教程
2022/07/15 数码科技