技術(shù)頻道導(dǎo)航
HTML/CSS
.NET技術(shù)
IIS技術(shù)
PHP技術(shù)
Js/JQuery
Photoshop
Fireworks
服務(wù)器技術(shù)
操作系統(tǒng)
網(wǎng)站運(yùn)營(yíng)

贊助商

分類(lèi)目錄

贊助商

最新文章

搜索

PHP抓網(wǎng)頁(yè)內(nèi)容,網(wǎng)址含中文路徑時(shí)出錯(cuò)

作者:admin    時(shí)間:2021-8-23 10:11:30    瀏覽:

今天需要實(shí)現(xiàn)一個(gè)簡(jiǎn)單的功能,就是用PHP抓網(wǎng)頁(yè)內(nèi)容,但是在實(shí)際使用時(shí)遇到了一個(gè)問(wèn)題,就是無(wú)論用何種方法去獲取網(wǎng)頁(yè)內(nèi)容,當(dāng)網(wǎng)址含有中文路徑時(shí)就會(huì)出錯(cuò)。

我用了file_get_contents()curl兩種方法,當(dāng)網(wǎng)址不含中文時(shí),沒(méi)有問(wèn)題,但當(dāng)網(wǎng)址含有中文,就不行了。

 PHP抓網(wǎng)頁(yè)內(nèi)容,網(wǎng)址含中文路徑時(shí)出錯(cuò)

如抓下面這個(gè)網(wǎng)頁(yè)沒(méi)問(wèn)題

http://gazebo2go.com/tutorial/

但抓下面這個(gè)網(wǎng)頁(yè)就抓不到

http://gazebo2go.com/tutorial/html/tags/按鈕/

有人提到用curl來(lái)抓,添加header頭信息,但是經(jīng)過(guò)測(cè)試這個(gè)方法是無(wú)效的。

在測(cè)試過(guò)程中,我還嘗試過(guò)用encode等網(wǎng)址編碼函數(shù),但還是沒(méi)能解決問(wèn)題。

這個(gè)問(wèn)題看似不大,但解決起來(lái)還是煞費(fèi)心神的。

我又谷歌了一下。

最終找到了問(wèn)題的解決方法,那就是需要使用下面這個(gè)語(yǔ)句,對(duì)網(wǎng)址進(jìn)行轉(zhuǎn)換。

$Url = "http://gazebo2go.com/tutorial/html/tags/按鈕/";
$Url = iconv('utf-8', 'gbk', $Url); //把utf-8轉(zhuǎn)為gbk

然后用轉(zhuǎn)換后的網(wǎng)址去抓,這樣,無(wú)論用何種方法,都能成功抓到想要的網(wǎng)頁(yè)了。

iconv編碼格式轉(zhuǎn)換

1. iconv()介紹

iconv函數(shù)可以將一種已知的字符集文件轉(zhuǎn)換成另一種已知的字符集文件。例如:從GB2312轉(zhuǎn)換為UTF-8。

iconv函數(shù)在php5中內(nèi)置,GB字符集默認(rèn)打開(kāi)。

2. iconv()錯(cuò)誤

iconv在轉(zhuǎn)換字符”—”到gb2312時(shí)會(huì)出錯(cuò),解決方法是在需要轉(zhuǎn)成的編碼后加 “//IGNORE”,也就是iconv函數(shù)第二個(gè)參數(shù)后。

添加了字符串 //IGNORE,不能以目標(biāo)字符集表達(dá)的字符將被默默丟棄。 否則,會(huì)導(dǎo)致一個(gè) E_NOTICE并返回 false。

代碼如下:

iconv("gb2312", "utf-8//IGNORE", $data) 【把gb2312轉(zhuǎn)換成utf-8】

您可能對(duì)以下文章也感興趣

標(biāo)簽: file_get_contents  curl  
x
  • 站長(zhǎng)推薦
/* 左側(cè)顯示文章內(nèi)容目錄 */