使用Curl进行抓取远程内容时url中文编码问题
2024-09-20 22:07:28
PHP中对于URL进行编码,可以使用 urlencode() 或者 rawurlencode(),二者的区别是前者把空格编码为 '+',而后者把空格编码为 '%20',不过应该注意的是,在编码时应该只对部分URL编码,否则URL中的冒号和反斜杠也会被转义。下面是详细解释:
1
|
string urlencode( string str) |
返回字符串,此字符串中除了 -_. 之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数,空格则编码为加号(+)。
例子 1 :urlencode函数与rawurlencode函数区别
1
2
3
4
|
$str = '博 客' ; echo urlencode( $str ); echo "<br>" ; echo rawurlencode( $str ); |
url结果:
1
2
|
%B2%A9+%BF%CD %B2%A9%20%BF%CD |
例子 2 :url中文编码方法
从url:"http://www.baidu.com/s?wd=博 客" 转为 url:"http://www.baidu.com/s?wd=%E5%8D%9A%20%E5%AE%A2";
1
2
3
4
|
$url = 'http://www.baidu.com/s?wd=博 客' ;
$arr = explode ( '=' , $url );
$url = $arr [0]. '=' .rawurlencode( $arr [1]);
echo $url ;
|
结果:
http://www.baidu.com/s?wd=%E5%8D%9A%20%E5%AE%A2
或许用以下url编码函数
1
2
3
4
5
6
7
8
9
10
11
12
|
function cn_urlencode( $url ){
$pregstr = "/[\x{4e00}-\x{9fa5}]+/u" ; //UTF-8中文正则
if (preg_match_all( $pregstr , $url , $matchArray )){ //匹配中文,返回数组
foreach ( $matchArray [0] as $key => $val ){
$url = str_replace ( $val , urlencode( $val ), $url ); //将转译替换中文
}
if ( strpos ( $url , ' ' )){ //若存在空格
$url = str_replace ( ' ' , '%20' , $url );
}
}
return $url ;
}
|
url结果:
http://www.baidu.com/s?wd=%E5%8D%9A%20%E5%AE%A2
最新文章
- yii框架安装心得
- 一步一步学swift之:自己写Api接口-PHP
- 关于“服务器提交了协议冲突. Section=ResponseStatusLine";问题
- 题目1096:日期差值(a-b=(a-c)-(b-c))
- SSH动态查询封装接口介绍
- UVA 12232 - Exclusive-OR(带权并查集)
- C预处理器和C库
- js递归遍历多维数组并在修改数组的key后返回新的多维数组
- Gulp压缩前端CS,JS,图片文件
- JS监听滚动条进度
- log4j - 使用教程说明
- Go vs Erlang - 转
- springmvc静态资源处理
- Linux split命令参数及用法详解---linux分割文件命令
- SpringMVC 源码分析
- MySQL5.7 并行复制配置
- markModified声明要修改的数组字段
- 后台程序获取JPG/GIF/PNG图片宽度、高度
- 设置 IE 默认模式为 IE8
- 解决64位debian下无法安装ia32库的问题
热门文章
- DSP连接不上CCS3.3的问题讨论
- 斯坦福大学IOS开发课程笔记(第七课第一部分)
- 找唯一不出现三次而出现1次的数子O(n)位运算算法
- DHTMLX系列组件的学习笔记
- ZOJ 3702 Fibonacci
- docker学习笔记2:容器操作
- Windows Azure 社区新闻综述(#78 版)
- BIRT使用2:安装、一般使用顺序
- NGUI 3.5教程(二)Label 标签 (Hello world)、多行文本
- SPOJ 11840. Sum of Squares with Segment Tree (线段树,区间更新)