使用Curl进行抓取远程内容时url中文编码问题
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
使用Curl进行抓取远程内容时url中文编码问题的更多相关文章
- php使用curl简单抓取远程url的方法
		
这篇文章主要介绍了php使用curl简单抓取远程url的方法,涉及php操作curl的技巧,具有一定参考借鉴价值,需要的朋友可以参考下 本文实例讲述了php使用curl抓取远程url的方法.分 ...
 - PHP cURL库函数抓取页面内容
		
目录 1 为什么要用cURL? 2 启用cURL 3 基本结构 4 检查错误 5 获取信息 6 基于浏览器的重定向 7 用POST方法发送数据 8 文件上传 9 cURL批处理(multi cURL) ...
 - php抓取远程数据显示在下拉列表中
		
前言:周五10月20日的时候,经理让做一个插件,使用的thinkphp做这个demo 使用CURL抓取远程数据时如果出现乱码问题可以加入 header("content-type:text/ ...
 - php curl抓取远程页面内容的代码
		
使用php curl抓取远程页面内容的例子. 代码如下: <?php /** * php curl抓取远程网页内容 * edit by www.jbxue.com */ $curlPost = ...
 - 利用curl抓取远程页面内容
		
最基本的操作如下 $curlPost = 'a=1&b=2';//模拟POST数据$cookie_file = tempnam('./temp','kie');//可选,保存ses ...
 - file_get_contents抓取远程URL内容
		
/** * POST URL * @param $url * @param null $post * @return false / string */ public static function ...
 - 百度UEditor编辑器关闭抓取远程图片功能(默认开启)
		
这个坑娘的功能,开始时居然不知道如何触发,以为有个按钮,点击一下触发,翻阅了文档,没有发现,然后再网络上看到原来是复制粘贴非白名单内的图片到编辑框时触发,坑娘啊............... 问题又来 ...
 - 【转载】ASP.NET以Post方式抓取远程网页内容类似爬虫功能
		
使用HttpWebRequest等Http相关类,可以在应用程序中或者网站中模拟浏览器发送Post请求,在请求带入相应的Post参数值,而后请求回远程网页信息.实现这一功能也很简单,主要是依靠Http ...
 - PHP批量抓取远程网页图片并存到本地实现方法和源码
		
做为一个仿站工作者,当遇到网站有版权时甚至加密的时候,WEBZIP也熄火,怎么扣取网页上的图片和背景图片呢.有时候,可能会想到用火狐,这款浏览器好像一个强大的BUG,文章有版权,屏蔽右键,火狐丝毫也不 ...
 
随机推荐
- java 异常 之 实战篇(trows 和 try catch Dead Code)
			
一:throws 和 trycatch 差别 (1)比如.publicFileWriter(String fileName) throws IOException{} 我在mian中创建一个FileW ...
 - C++第13周(春)项目1 - 点、圆的关系
			
课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759.内有完整教学方案及资源链接 [项目1 - 点.圆的关系](1)先建立一个P ...
 - JSP动态网站环境搭建应用中的详细步骤(Tomcat和Apache/IIS的整合)
			
链接地址:http://www.cnblogs.com/dartagnan/archive/2011/03/25/2003426.html JSP动态网站环境搭建应用中的详细步骤(Tomcat和Apa ...
 - Data Annotation
			
Data Annotation 什么是Data Annotation ? 如何使用 ? 自定义Validate Attribute EF Db first中使用Data Annotation asp ...
 - 7款Linux下阅读PDF的阅读器。
			
5款Linux下阅读PDF的阅读器.1. Mupdf:link 2. Adobe Reader:link 3. Foxit Reader:link 4.Evince:link 5. Okular:li ...
 - boost:库program_options--第一篇
			
程式執行參數處理函式庫:Boost Program Options(1/N) 一般程式寫得大一點.或是需要比較有彈性,通常都需要在程式執行的時候,從外部讀取一些參數,來做為內部的設定值.一般來說,比較 ...
 - Windows下用WinSCP传输数据到Linux上
			
Scenario:最近公司做的一个项目,UI部分我是使用python在编译时做localization的,是linux下运行的,但是开发是在windows下进行的每次编译后都要手动通过WinSCP这个 ...
 - WM_PAINT消息在窗口重绘的时候产生,那什么时候窗口会重绘(异步工作方式效率高、灵活性强,还有UpdateWindow和RedrawWindow帮忙)
			
Q:wm_paint消息在窗口重绘的时候产生,那什么时候窗口会重绘?? A: 严格地说,只有当收到WM_PAINT消息后窗口会重绘 但是引起这个消息的事件有很多, 比如:1.首次创建 2.移动 3.改 ...
 - Atitit.dwr3 不能显示错误具体信息的解决方式,控件显示错误具体信息的解决方式 java .net php
			
Atitit.dwr3 不能显示错误具体信息的解决方式,控件显示错误具体信息的解决方式 java .net php 1. Keyword/subtitle 1 2. 使用dwr3的异常convert处 ...
 - MySQL里求给定的时间是所在月份的第几个礼拜
			
Share 一个昨天写的函数. 目的是求给定的时间是所在月份的第几个礼拜. DELIMITER $$ USE `t_girl`$$ DROP FUNCTION IF EXISTS `weekofmon ...