本文目錄一覽:
- 1、curl獲取的中文是亂碼要怎麼解決
- 2、php curl 本地測試可用,線上測試報錯
- 3、使用CURL偽造來源網址與IP
- 4、php獲取網頁源碼內容有哪些辦法
- 5、PHP 如何獲取到一個網頁的內容
- 6、解決php curl顯示亂碼
curl獲取的中文是亂碼要怎麼解決
一般是因為你抓取的網頁內容編碼和你執行curl文件的編碼不一致引起的。你需要弄清楚你抓取的頁面是什麼編碼格式的,這樣你就可以使用iconv函數進行轉換了。
例:
$str = ‘要轉換的內容’;
$str = iconv(‘gb2312’, ‘utf-8’, $str);
這樣起到的功能是:將str變數的內容從gb2312格式轉為utf-8格式。
php curl 本地測試可用,線上測試報錯
?php
/*****************************************************
程序名稱: curl使用測試
程序說明: 股票頁面信息獲取
編寫時間: 2011年2月12日
編寫人員: 童童
修改時間:
修改人員: 童童
備 注:
****************************************************/
$GPNumber = ‘000877’;
$curlPost = ‘gpdm=’ . urlencode($GPNumber);
//初始化
$ch = curl_init();
//設置選項(直接設置或者通過數組設置)
//直接設置
//設置你需要抓取的URL
curl_setopt($ch, CURLOPT_URL, “”);
//通過數組設置
/*
$options = array(
CURLOPT_URL = ”,
CURLOPT_HEADER = false
);
curl_setopt_array($ch, $options);
*/
// 設置header
curl_setopt($ch, CURLOPT_HEADER, 1);
// 設置cURL 參數,要求結果保存到字元串中還是輸出到屏幕上。
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
//設置使用POST方式
curl_setopt($ch, CURLOPT_POST, 1);
//設置POST數據
curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost);
//執行並獲取HTML文檔內容
$str = curl_exec($ch);
//轉換編碼
$str = mb_convert_encoding($str, “utf-8”, “gb2312”);
//$str = mb_convert_encoding($str, “gb2312”, “utf-8”);
//ini_set(‘max_execution_time’, ‘180’);
set_time_limit(1800);
//處理內容
$str1 = “/tr[^]*td[^]*(?value1.*?)//td[^]*td[^]*(?value2.*?)//td[^]*td[^]*(?value3.*?)//td[^]*td[^]*(?value4.*?)//br//[//s//S]*////a////td[^]*td[^]*(?value5.*?)//td[^]*td[^]*(?value6.*?)//td[^]*td[^]*(?value7.*?)//td[^]*td[^]*(?value8.*?)//td[^]*td[^]*(?value9.*?)//td[^]*td[^]*(?value10.*?)//td[^]*td[^]*(?value11.*?)//td[^]*td[^]*(?value12.*?)//td[^]*td[^]*(?value13.*?)//td[^]*td[^]*(?value14.*?)//td[^]*td[^]*(?value15.*?)//td[^]*td[^]*(?value16.*?)//td[^]*td[^]*(?value17.*?)//td[^]*td[^]*(?value18.*?)//td[^]*td[^]*(?value19.*?)//td[^]*td[^]*(?value20.*?)//td[^]*td[^]*(?value21.*?)//td[^]*td[^]*(?value22.*?)//td[^]*td[^]*(?value23.*?)//td[^]*td[^]*(?value24.*?)//td[^]*td[^]*(?value25.*?)//td[^]*td[^]*(?value26.*?)//td[^]*td[^]*(?value27.*?)//td[^]*td[^]*(?value28.*?)//td[^]*td[^]*(?value29.*?)//td[^]*td[^]*(?value30.*?)//td[^]*td[^]*(?value31.*?)//td[^]*td[^]*(?value32.*?)//td[^]*td[^]*(?value33.*?)//td[^]*td[^]*(?value34.*?)//td[^]*td[^]*(?value35.*?)//td[^]*td[^]*(?value36.*?)//td[^]*td[^]*(?value37.*?)//td[^]*td[^]*(?value38.*?)//td[^]*td[^]*(?value39.*?)//td[^]*td[^]*(?value40.*?)//td[^]*td[^]*(?value41.*?)//td[^]*td[^]*(?value42.*?)//td[^]*td[^]*(?value43.*?)//td[^]*td[^]*(?value44.*?)//td[^]*td[^]*(?value45.*?)//td[^]*td[^]*(?value46.*?)//td[^]*td[^]*(?value47.*?)//td[^]*td[^]*(?value48.*?)//td[^]*td[^]*(?value49.*?)//td[^]*//tr/”;
$str2 = “tr bgcolor=’#EDEDED’ height=’20’td2011年2月11日/tdtd16:12/tdtd000877/tdtd class=tdred天山股份 bra target=’_blank’ href=”” mce_href=””分時ddx/a a target=’_blank’ href=”” mce_href=””點評/a a target=’_blank’ href=”” mce_href=””新聞/a a target=’_blank’ href=”gpdmyd.asp?gpdm=000877″ mce_href=”gpdmyd.asp?gpdm=000877″異動/a a target=’_blank’ href=”” mce_href=””股東/a/tdtd33.81/tdtd class=tdred6.42/tdtd class=tdred0.241/tdtd0.287/tdtd16.748/td td class=tdbgred2468/td td class=tdred1251/td td class=tdred1217/td td class=tdred-676/td td class=tdred-1792/td td class=tdbgred8.76/tdtd class=tdred17.28/tdtd class=tdred7.3/tdtd0.414/tdtd0.396/tdtd0.053/tdtd-2.067/tdtd7/tdtd2/tdtd class=tdred3.7/tdtd3.6/tdtd-2.0/tdtd class=tdred-5.3/tdtd107/tdtd1.19/tdtd class=tdred-5401/tdtd131/tdtd7119/tdtd8479/tdtd14.3/tdtd12.0/tdtd-1792/tdtd2468/tdtd6.0/tdtd2.3/tdtd51.1/tdtd47.5/tdtd18.5/tdtd20.5/tdtd24.4/tdtd29.7/tdtd3.30/tdtd1.85/tdtd18.74③/tdtd1.353/td/tr”;
echo preg_match_all($str1,$str,$strs);
/*
foreach ($strs as $row)
{
echo mb_convert_encoding($row, “utf-8”, “gb2312″).”/br”;
}
*/
/*
if ($output === FALSE) {
echo “cURL Error: ” . curl_error($ch);
}
*/
//var_dump($str);
//釋放curl句柄
curl_close($ch);
?
使用CURL偽造來源網址與IP
很多投票都有對來路的網址和IP進行驗證,但是使用CURL可以偽造成任意的網址與IP,以繞過一些簡單的驗證,下面舉一個簡單的例子。程序運行之前,請確保 php.ini 中 extension=php_curl.dll
視圖是用戶用戶能看到你的網站的所有。 他們使用一個統一的介面, 而且可以根據需要進行修改。 MVC 的好處之一是你分開了表示層和邏輯層, 一切都顯得很乾凈。視圖實際上是一組包含有你的內容的HTML結構。結構中有各種元素,如顏色,字體,文字布局等; 不過視圖不關心這些,它要做的只是取來內容,顯示出來。
一般我們在控制器中這樣定義:
function index() {
$data[‘mytitle’] = “A website monitoring tool”;
$data[‘mytext’] = “This website helps you to keep track of the other websites you control.”;
$this-load-view(‘basic_view’,$data);
}
我們把$data數組作為$this-load-view()的第二個叄數,在視圖名稱之後。視圖接收到$data數組後,使用PHP函數extract()把數組中的每個元素轉換成內存變數,數組的鍵名即為變數名,值為變數內所包含的值。這些變數的值能直接被視圖引用:
雖然你只能傳送一個變數到視圖, 但是通過建立數組,你能把大量變數整潔地傳入視圖。它似乎複雜, 但是實際上是一種緊湊和優秀的信息傳輸方式。
如果傳遞過來的數組是包含多個數據,那麼就需要遍歷,操作一般如下。先是控制器:
$data[“notice”] =array(‘aaa’,’bbb’);
$this-load-view(‘api/notice’,$data);
視圖中解析:
if(count($notice)0){
foreach($notice as $key =$value ){
?
}
?
再說下二維數組的傳遞與遍歷問題。下面的程序實現遍歷某個目錄下的文件。
class Data extends CI_Controller {
public function index()
{
$this-load-helper(‘url’);
$data[‘page_title’] = ‘簡明現代魔法’;
$data[‘pre_url’] = ‘application/views/default/’;
$this-load-view(‘default/header’, $data);
$this-load-view(‘default/index’, $data);
$this-load-view(‘default/footer’);
//$this-load-view(‘index’);
}
public function gdnews()
{
$this-load-helper(‘url’);
$arr = array();
function tree($directory)
{
$mydir = dir($directory);
while($file = $mydir-read())
{
// 是目錄的話
if((is_dir(“$directory/$file”)) AND ($file!=”.”) AND ($file!=”..”))
{
//echo “
$file
\n”;
//tree(“$directory/$file”);
}
// 不是目錄
else
{
$arr[‘name’][] = @iconv(‘GB2312′,’UTF-8’,$file);
$arr[‘time’][] = @iconv(‘GB2312′,’UTF-8’,date(‘Y-m-d H:i:s’, filemtime($file)));
}
}
$mydir-close();
return $arr;
}
$dir = “datas/gdnews/”;
$arr = tree($dir);
$data[‘files’] = $arr;
$data[‘page_title’] = ‘簡明現代魔法’ ;
$data[‘dir’] = $dir;
$this-load-view(‘default/header’, $data);
$this-load-view(‘default/data’, $data);
$this-load-view(‘default/footer’);
}
}
?
在視圖中這麼輸出就可以:
if(count($files)0)
{
foreach($files[‘name’] as $key =$value ){
?
}
}
?
你是否有這樣的煩惱,想學習高級技術,缺乏好的高級學習資料,收集了部分12年網站架構師授課的TP5、laravel、swoole、swoft、高並發、分散式等資料,現在免費分享給大家,官方群:820469789,大牛帶你裝逼帶你飛
php獲取網頁源碼內容有哪些辦法
可以參考以下幾種方法:
方法一: file_get_contents獲取
span style=”white-space:pre” /span$url=””;
span style=”white-space:pre” /span$fh= file_get_contents
(”);span style=”white-space:pre” /spanecho $fh;
方法二:使用fopen獲取網頁源代碼
span style=”white-space:pre” /span$url=””;
span style=”white-space:pre” /span$handle = fopen ($url, “rb”);
span style=”white-space:pre” /span$contents = “”;
span style=”white-space:pre” /spanwhile (!feof($handle)) {
span style=”white-space:pre” /span$contents .= fread($handle, 8192);
span style=”white-space:pre” /span}
span style=”white-space:pre” /spanfclose($handle);
span style=”white-space:pre” /spanecho $contents; //輸出獲取到得內容。
方法三:使用CURL獲取網頁源代碼
$url=””;
$UserAgent = ‘Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506; .NET CLR 3.5.21022; .NET CLR 1.0.3705; .NET CLR 1.1.4322)’;
$curl = curl_init(); //創建一個新的CURL資源
curl_setopt($curl, CURLOPT_URL, $url); //設置URL和相應的選項
curl_setopt($curl, CURLOPT_HEADER, 0); //0表示不輸出Header,1表示輸出
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); //設定是否顯示頭信息,1顯示,0不顯示。//如果成功只將結果返回,不自動輸出任何內容。如果失敗返回FALSE
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_ENCODING, ”); //設置編碼格式,為空表示支持所有格式的編碼
//header中「Accept-Encoding: 」部分的內容,支持的編碼格式為:”identity”,”deflate”,”gzip”。
curl_setopt($curl, CURLOPT_USERAGENT, $UserAgent);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
//設置這個選項為一個非零值(象 「Location: 「)的頭,伺服器會把它當做HTTP頭的一部分發送(注意這是遞歸的,PHP將發送形如 「Location: 「的頭)。
$data = curl_exec($curl);
echo $data;
//echo curl_errno($curl); //返回0時表示程序執行成功
curl_close($curl); //關閉cURL資源,並釋放系統資源
拓展資料
PHP(外文名:PHP: Hypertext Preprocessor,中文名:「超文本預處理器」)是一種通用開源腳本語言。語法吸收了C語言、Java和Perl的特點,利於學習,使用廣泛,主要適用於Web開發領域。PHP 獨特的語法混合了C、Java、Perl以及PHP自創的語法。它可以比CGI或者Perl更快速地執行動態網頁。
用PHP做出的動態頁面與其他的編程語言相比,PHP是將程序嵌入到HTML(標準通用標記語言下的一個應用)文檔中去執行,執行效率比完全生成HTML標記的CGI要高許多;PHP還可以執行編譯後代碼,編譯可以達到加密和優化代碼運行,使代碼運行更快。
參考資料:PHP(超文本預處理器)-百度百科
PHP 如何獲取到一個網頁的內容
1.file_get_contents
PHP代碼
複製代碼 代碼如下:
?php
$url = “”;
$contents = file_get_contents($url);
//如果出現中文亂碼使用下面代碼
//$getcontent = iconv(“gb2312”, “utf-8”,$contents);
echo $contents;
?
2.curl
PHP代碼
複製代碼 代碼如下:
?php
$url = “”;
$ch = curl_init();
$timeout = 5;
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
//在需要用戶檢測的網頁里需要增加下面兩行
//curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
//curl_setopt($ch, CURLOPT_USERPWD, US_NAME.”:”.US_PWD);
$contents = curl_exec($ch);
curl_close($ch);
echo $contents;
?
3.fopen-fread-fclose
PHP代碼
複製代碼 代碼如下:
?php
$handle = fopen (“”, “rb”);
$contents = “”;
do {
$data = fread($handle, 1024);
if (strlen($data) == 0) {
break;
}
$contents .= $data;
} while(true);
fclose ($handle);
echo $contents;
?
註:
1.
使用file_get_contents和fopen必須空間開啟allow_url_fopen。方法:編輯php.ini,設置
allow_url_fopen = On,allow_url_fopen關閉時fopen和file_get_contents都不能打開遠程文件。
2.使用curl必須空間開啟curl。方法:windows下修改php.ini,將extension=php_curl.dll前面的分
號去掉,而且需要拷貝ssleay32.dll和libeay32.dll到C:\WINDOWS\system32下;Linux下要安裝curl擴
展。
解決php curl顯示亂碼
弄明白目標網頁的編碼和你自己顯示內容網頁的編碼,使用PHP函數mb_convert_encoding()轉換編碼即可。
例如:
/* 轉換utf-8為gb2312 */
$str = mb_convert_encoding($str, “gb2312”, “utf-8”);
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/231507.html