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的原因