访问编码后的中文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 相关文章推荐
提取HTML标签
Oct 09 PHP
Php Cookie的一个使用注意点
Nov 08 PHP
使用PHP获取网络文件的实现代码
Jan 01 PHP
PHP中extract()函数的定义和用法
Aug 17 PHP
PHP调用MySQL存储过程并返回值的方法
Dec 26 PHP
php实现用于计算执行时间的类实例
Apr 18 PHP
非常全面的php日期时间运算汇总
Nov 04 PHP
PHP 数组遍历foreach语法结构及实例
Jun 13 PHP
php实现数组纵向转横向并过滤重复值的方法分析
May 29 PHP
Windows平台PHP+IECapt实现网页批量截图并创建缩略图功能详解
Aug 02 PHP
Laravel第三方包报class not found的解决方法
Oct 13 PHP
PHP 出现 http500 错误的解决方法
Mar 09 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
php的一些小问题
2010/07/03 PHP
smarty中先strip_tags过滤html标签后truncate截取文章运用
2010/10/25 PHP
php连接mssql数据库的几种方法
2013/02/21 PHP
ThinkPHP惯例配置文件详解
2014/07/14 PHP
Apache+PHP+MySQL搭建PHP开发环境图文教程
2020/08/06 PHP
JavaScript 节点操作 以及DOMDocument属性和方法
2007/12/06 Javascript
拖拉表格的JS函数
2008/11/20 Javascript
jQuery maxlength文本字数限制插件
2010/04/16 Javascript
Bootstrap进度条组件知识详解
2016/05/01 Javascript
AngularJS equal比较对象实例详解
2016/09/14 Javascript
JavaScript实现QQ聊天消息展示和评论提交功能
2017/05/22 Javascript
vue与vue-i18n结合实现后台数据的多语言切换方法
2018/03/08 Javascript
深入浅析Vue中的Prop
2018/06/10 Javascript
详解vue-cli下ESlint 配置说明
2018/09/03 Javascript
深入解析微信小程序开发中遇到的几个小问题
2020/07/11 Javascript
Element Alert警告的具体使用方法
2020/07/27 Javascript
ant design中upload组件上传大文件,显示进度条进度的实例
2020/10/29 Javascript
微信小程序学习之自定义滚动弹窗
2020/12/20 Javascript
[03:07]【DOTA2亚洲邀请赛】我们,梦开始的地方
2017/03/07 DOTA
Python通过select实现异步IO的方法
2015/06/04 Python
利用python模拟实现POST请求提交图片的方法
2017/07/25 Python
解决pycharm界面不能显示中文的问题
2018/05/23 Python
基于数据归一化以及Python实现方式
2018/07/11 Python
实现ECharts双Y轴左右刻度线一致的例子
2020/05/16 Python
Python unittest装饰器实现原理及代码
2020/09/08 Python
Scrapy项目实战之爬取某社区用户详情
2020/09/17 Python
HTML5之HTML元素扩展(下)—增强的Form表单元素值得关注
2013/01/31 HTML / CSS
详解通过HTML5 Canvas实现图片的平移及旋转变化的方法
2016/03/22 HTML / CSS
微软台湾官方网站:Microsoft台湾
2018/08/15 全球购物
Volcom英国官方商店:美国殿堂级滑板、冲浪、滑雪服装品牌
2019/03/13 全球购物
哈萨克斯坦移动和数字技术在线商店:SatelOnline.kz
2020/09/04 全球购物
优秀党员转正的自我评价
2013/10/06 职场文书
安全月活动总结
2014/05/05 职场文书
关于环保的标语
2014/06/13 职场文书
宾馆仓管员岗位职责
2014/07/27 职场文书
2014年销售工作总结
2014/12/01 职场文书