URL特殊字符转义
来源:互联网 发布:开淘宝怎么进货 编辑:程序博客网 时间:2024/06/07 23:44
问题描述:
在工作中,因为需要将另外一个系统的一批产品转移到自己系统,产品基础资料什么的,都没问题,直接给字段插入数据库就好,但是遇到了图片的问题,图片是在别人的服务器上,首先考虑的是,要不把整个图片文件打包过来?但是又不需要所有的图片文件,也就换一种方法,别的系统提供访问路径,我们去抓取。于是采用了PHP的curl方式抓取图片。但是遇到2个问题:
1 给的图片链接,放入浏览器能访问,但是curl访问时返回400错误
比如图片链接:xw.vekinerp.com/flyingbird-ecpp/data/upload/160929/CF60EI-6-Eiffel Tower.jpg
2 给的图片链接,包含中文,浏览器能访问,curl访问返回400
比如图片链接:fb.vekinerp.com/flyingbird-ecpp/ftp/GX65 米钉太阳镜-小林/GX65-C-C30-11-BlackBlue BlueMirror.jpg
代码如下:
$hander = curl_init();curl_setopt($hander,CURLOPT_URL,$image);curl_setopt($hander,CURLOPT_FILE,$fp);curl_setopt($hander,CURLOPT_FOLLOWLOCATION,1);curl_setopt($hander,CURLOPT_TIMEOUT,60);$result = curl_exec($hander);if( $result == true ){ $statusCode = curl_getinfo($hander,CURLINFO_HTTP_CODE); if( $statusCode == 200 ) { $image_path = $filename; } }curl_close($hander);
先说第一个问题,这个是浏览器访问是会自动将下面所提及的特殊字符进行转义,所以直接CURL访问时会报400错误,转义之后就能正常访问了,但是后来发现个问题,/ 和 % 这两个字符,需注意 / 如果是url访问路径的分割符,原本是不用转义的,转义之后反而弄巧成拙, % 字符,如下所见,下面的大部分字符转义之后都带有%这个特殊字符,比如把+转成%2B后,又对%2B中的%进行转义,这样就又错了……所以需注意转义的先后顺序
第一个问题,对$image进行转义
$image = str_replace(' ', '%20', $image);
特殊字符说明转载于
http://blog.csdn.net/wswqiang...
URL中一些字符的特殊含义,基本编码规则如下:
1、空格换成加号(+)
2、正斜杠(/)分隔目录和子目录
3、问号(?)分隔URL和查询
4、百分号(%)制定特殊字符
5、#号指定书签
6、&号分隔参数
如果需要在URL中用到,需要将这些特殊字符换成相应的十六进制的值
字符 URL编码值 空格 %20 " %22 # %23 % %25 & %26 ( %28 ) %29 + %2B , %2C / %2F : %3A ; %3B < %3C = %3D > %3E ? %3F @ %4o \ %5C | %7C
2 第二个问题:所说的中文路径问题,在网上搜了个方法,说是要加头信息,但是貌似不管用,先贴在这里,后续再研究
$headers = array('content-type: application/x-www-form-urlencoded;charset=UTF-8');curl_setopt($hander, CURLOPT_HTTPHEADER, $headers);
- URL特殊字符转义
- URL特殊字符转义
- URL特殊字符转义
- URL特殊字符转义
- URL特殊字符的转义
- URL特殊字符的转义
- URL特殊字符需转义
- URL特殊字符需转义
- URL特殊字符需转义
- URL 特殊字符安转义
- URL特殊字符需转义
- URL特殊字符需转义
- URL特殊字符需转义
- Java 特殊字符URL转义
- url特殊字符转义问题
- URL特殊字符需转义
- URL特殊字符需转义
- URL特殊字符需转义
- C++中ANSI、Unicode16、UTF-8字符串之间的互转
- CSS 浮动实例。为了兼容,浮动元素放在所在行的最前面
- c++原子操作内存序
- 刷题#R3
- 必测的支付漏洞(三)服务器未返回支付结果前进行干预
- URL特殊字符转义
- 数据结构之红黑树
- [APP] YUM 源配置
- window系统启动redis和清除缓存
- ionic3学习历程(1)
- Linux下修改node的环境变量
- PHP中的数组与数据结构
- android checksum校验
- 3D CNN框架结构各层详细计算过程