当前位置:  编程技术>php

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

    来源: 互联网  发布时间:2014-08-26

    本文导语:  昨天做一个项目,其中有一个需求是每一张图片对应一小段文字对图片的说明,普通的做法是新建一个表然后把图片名与说明文字都记录到数据库内。仔细考虑后感觉这个应用不要数据库也能完成,我实现的方案是把说明文字U...

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

可是通过浏览器访问图片时却提示找不到文件,如有一张图片的说明文字为“琼台博客”,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即可,具体实现方式我就不一一举例,动手做做思考一下吧!


    
 
 

您可能感兴趣的文章:

  • 在windows可以访问到中文文件名的文件,而在unix下却访问不了,是什么原因?
  • 请教关于unixODBC访问sql Server的中文问题
  • 在AIX中,中文目录如何访问?
  • 为什么在LINUX的网络邻居中访问WINDOWS,不支持中文?????
  • 访问Unix系统下的Tomcat服务器中的htm页面时,中文被改成默认的西欧字体???
  • RedHat 8.0 ,中文,修改安全级别无法生效;http://127.0.0.1 ,ftp://127.0.0.1访问被拒绝
  • 新装RedRedhat9,在其下访问Fat32分区,分区上中文文件名显示出来是乱码,如何解决?
  • LINUX 下能正确显示中文,IE访问就是乱码,这是啥问题呢
  • 试验成功:如何访问带中文目录的cdrom,舒畅,再问点其他问题
  • 谁说得详细谁得分!我从rh 7.3访问windows的文件时,发现无法显示中文,汉字都变成了问号。怎么解决阿
  • 使用UTF8编码通过gsoap访问.Net Web Service依然不能正确显示中文
  • python3访问sina首页中文的处理方法
  • winxp和linux双系统,在linux下访问winxp的中文名文件,文件名显示乱码。如何解决?
  • 在WCF数据访问中使用缓存提高Winform字段中文显示速度的方法
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 解决服务器应用程序不可用,错误:0x80070005拒绝访问的错误
  • sql2005 create file遇到操作系统错误5拒绝访问 错误1802
  • JSP访问数据库错误。
  • MSSQL附加数据库拒绝访问提示5120错误的处理方法
  • 我在JBUILDER4作的APPLICATION有数据访问时的错误,积极给分
  • ubuntu 用的是xampp集成环境,访问phpmyadmin时出错,错误如下:
  • win7无法访问redhat9的samba时,密码总是错误
  • linux通过网上邻居访问windowsXP时记住错误密码的问题
  • php出现内存位置访问无效错误问题解决方法
  • 访问内存错误的问题。请高手帮我找下原因。。
  • linux程序里内存访问错误
  • 200分!!嵌入式Linux下通过TCP访问服务器,Socket被服务器重置,错误号104??(高手请进)解决后加送100分!!!
  • [高手进]海量数据网络通讯,当访问请求达3万以上时,出现coredump错误。一般是什么原因?
  • 检测到时钟错误。但是访问时间在修改时间之前的,为什么还是会出错?
  • 不能访问dev/hpet,这个是为什么啊?错误码提示:Device or resource busy,我下面是 有这个设备的
  • 新手请教一个linux下互斥量访问输出错误的问题
  • 组件访问被拒绝 --“/”应用程序中的服务器错误的解决方法
  • 求教JSP访问ACCESS数据库的SQL语句错误
  • IIC 访问DS1307 read:connect time out 错误各位高手看看!。。。。。。。。
  • C++ I/O 成员 seekg():在一个输入流中进行随机访问
  • 是不是在applet里面不能访问数据库阿?能访问的话,怎么访问?要什么特别的处理吗?100分!
  • 设置sharepoint 2010文档库中的 pdf文件在浏览器中访问的打开方式
  • 从其它电脑访问linux下的apache,有的可以访问,有的却访问不了,请问是什么原因,ping都能ping通的
  • IT科技资讯 iis7站长之家
  • 未装samba却可以访问windows网络,询问其访问机制
  • Android访问与手机通讯相关类的介绍
  • “访问控制矩阵比访问控制表更节约空间”
  • 在ReadHatLinux8.0下能否访问NTFS分区?如何访问?
  • php判断正常访问和外部访问的示例
  • 大家遇到过用IP访问和用域名访问效果不一样的情况吗?
  • 为什么我的ActiveX控件在htm中能够访问而在jsp中不能访问?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3