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

2015-01-24信息快讯网

这篇文章主要介绍了访问编码后的中文URL返回404错误的解决方法,本文使用的是替换方法,当然也可以使用加密方法来解决,最后附妹子图一张,需要的朋友可以参考下

昨天做一个项目,其中有一个需求是每一张图片对应一小段文字对图片的说明,普通的做法是新建一个表然后把图片名与说明文字都记录到数据库内。仔细考虑后感觉这个应用不要数据库也能完成,我实现的方案是把说明文字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在线解压ZIP文件的方法
php站内搜索关键词变亮的实现方法
php读取mssql的ntext字段返回值为空的解决方法
php连接oracle数据库及查询数据的方法
php查询mssql出现乱码的解决方法
关于URL最大长度限制的相关资料查证
php进行支付宝开发中return_url和notify_url的区别分析
PHP获取当前完整URL地址的函数
php中get_meta_tags()、CURL与user-agent用法分析
php通过session防url攻击方法
thinkphp四种url访问方式详解
PHP中通过fopen()函数访问远程文件示例
php中cookie实现二级域名可访问操作的方法
php网站被挂木马后的修复方法总结
php禁止直接从浏览器输入地址访问.php文件的方法
让ThinkPHP支持大小写url地址访问的方法
对PHP新手的一些建议(PHP学习经验总结)
PHP中使用localhost连接Mysql不成功的解决方法
PHP编译安装中遇到的两个错误和解决方法
PHP中读取照片exif信息的方法
PHP中使用json数据格式定义字面量对象的方法
PHP采用自定义函数实现遍历目录下所有文件的方法
zend framework框架中url大小写问题解决方法
PHP命名空间(namespace)的动态访问及使用技巧
asp.net访问网络路径方法(模拟用户登录)
php出现内存位置访问无效错误问题解决方法
php中的curl_multi系列函数使用例子
PHP使用CURL_MULTI实现多线程采集的例子
PHP实现把文本中的URL转换为链接的auolink()函数分享
php5.3以后的版本连接sqlserver2000的方法
PHP获取短链接跳转后的真实地址和响应头信息的方法
PHP使用CURL实现对带有验证码的网站进行模拟登录的方法
destoon实现底部添加你是第几位访问者的方法
PHP 只允许指定IP访问(允许*号通配符过滤IP)
Codeigniter实现处理用户登录验证后的URL跳转
PHP使用CURL获取302跳转后的地址实例
©2014-2024 dbsqp.com