PHP抓网页内容,网址含中文路径时出错

今天需要实现一个简单的功能,就是用PHP抓网页内容,但是在实际使用时遇到了一个问题,就是无论用何种方法去获取网页内容,当网址含有中文路径时就会出错。

我用了file_get_contents()curl两种方法,当网址不含中文时,没有问题,但当网址含有中文,就不行了。

 

如抓下面这个网页没问题

http://www.webkaka.com/tutorial/

但抓下面这个网页就抓不到

http://www.webkaka.com/tutorial/html/tags/按钮/

有人提到用curl来抓,添加header头信息,但是经过测试这个方法是无效的。

在测试过程中,我还尝试过用encode等网址编码函数,但还是没能解决问题。

这个问题看似不大,但解决起来还是煞费心神的。

我又谷歌了一下。

最终找到了问题的解决方法,那就是需要使用下面这个语句,对网址进行转换。

$Url = “http://www.webkaka.com/tutorial/html/tags/按钮/”;
$Url = iconv(‘utf-8’, ‘gbk’, $Url); //把utf-8转为gbk

然后用转换后的网址去抓,这样,无论用何种方法,都能成功抓到想要的网页了。

iconv编码格式转换

1. iconv()介绍

iconv函数可以将一种已知的字符集文件转换成另一种已知的字符集文件。例如:从GB2312转换为UTF-8。

iconv函数在php5中内置,GB字符集默认打开。

2. iconv()错误

iconv在转换字符”—”到gb2312时会出错,解决方法是在需要转成的编码后加 “//IGNORE”,也就是iconv函数第二个参数后。

添加了字符串 //IGNORE,不能以目标字符集表达的字符将被默默丢弃。 否则,会导致一个 E_NOTICE并返回 false

代码如下:

iconv(“gb2312”, “utf-8//IGNORE”, $data) 【把gb2312转换成utf-8】

您可能对以下文章也感兴趣

  • php获得网页源代码抓取网页内容的几种方法
  • fopen()和file_get_contents()打开URL获得网页内容的用法区别
  • php curl获得header检测GZip压缩的源代码
  • 如何从curl_errno返回值获取错误信息
  • 解决IIS运行PHP出现Call to undefined function curl_init()的问题
  • file_get_contents()报错gethostbyname failed的原因