php截取指定字元之間內容的類與執行個體(含轉碼、過濾html等)

來源:互聯網
上載者:User

 像我這樣的半拉子程式員,基本靠百度一下。基本是在前輩們的寶貴經驗基礎上,根據現在的需要進行整合、修改。因此首先鳴謝。聲明:知識來源並不代表原創來源,只代表本人從該處找到該知識。
第一部分、基礎知識點
1、一個php截取指定字串之間的字串的類

<?phpclass get_c_str {var $str;var $start_str;var $end_str;var $start_pos;var $end_pos;var $c_str_l;var $contents;function get_str($str,$start_str,$end_str){   $this->str = $str;   $this->start_str = $start_str;   $this->end_str = $end_str;   $this->start_pos = strpos($this->str,$this->start_str)+strlen($this->start_str);     $this->end_pos = strpos($this->str,$this->end_str);   $this->c_str_l = $this->end_pos - $this->start_pos;   $this->contents = substr($this->str,$this->start_pos,$this->c_str_l);   return $this->contents;}}?>

讚歎高人,這麼厲害的功能用短短几行代碼就搞定。同時再次感謝奉獻精神。
上述類的使用方法:
<?php
$get_c_str = new get_c_str;
echo $get_c_str -> get_str('[123456789]','[',']');
?>

2、過濾非必要的html代碼:strip_tags()函數
用法:strip_tags($sjb,'<img><p>');
“()”的逗號前是要處理的字串(可以是賦有字串值的變數),逗號後是過濾時保留的html標籤。如果不指定它,所有被處理字串中的html標籤將被全部清掉,只留下文字。

3、抓取到的內容(例如網頁)編碼與需要顯示時不符時的處理。
如果抓到的內容和顯示的頁面編碼不一致,會導致亂碼,辛苦半天會很鬱悶。找到處理方法如下:
a、把 GBK 編碼字串轉換成 UTF-8 編碼字串

<?php    header("content-Type: text/html; charset=Utf-8");    echo mb_convert_encoding("你是我的好朋友", "UTF-8", "GBK");    ?>   

b、把 UTF-8 編碼字串轉換成 GB2312 編碼字串

// 注意將此檔案存檔成   utf-8 編碼格式檔案再測試    <?php    header("content-Type: text/html; charset=gb2312");    echo mb_convert_encoding("你是我的好朋友", "gb312", "utf-8");    ?>    

*注意:使用mb_convert_encoding 函數需啟用PHP 的mbstring (multi-byte string)擴充

c、對整個頁面 進行轉換
該方法適用所有編碼環境。把前128個字元以外(顯示字元)的字元集都用 NCR (Numeric character reference,如“漢字”將轉換成“&amp;#27721;&amp;#23383;”這種形式)來表示,這樣的編碼在任意編碼環境下頁面都能正常顯示。
方法是在php檔案的頭部加上下面三行代碼:

<?phpmb_internal_encoding("gb2312");  // 這裡的gb2312是你網站原來的編碼    mb_http_output("HTML-ENTITIES");    ob_start('mb_output_handler'); ?>

二、應用執行個體
本執行個體的目的是把某網頁的某個部分抓取下來,處理成可以調用的變數,或更加符合使用要求的格式。

<?//基本變數*擷取資料來源,可為網頁,也可以是本地文字檔及網頁$file_name="http://yn.weather.com.cn/lijiang/index.shtml";//截取函數class get_c_str {var $str;var $start_str;var $end_str;var $start_pos;var $end_pos;var $c_str_l;var $contents;function get_str($str,$start_str,$end_str){   $this->str = $str;   $this->start_str = $start_str;   $this->end_str = $end_str;   $this->start_pos = strpos($this->str,$this->start_str)+strlen($this->start_str);     $this->end_pos = strpos($this->str,$this->end_str);   $this->c_str_l = $this->end_pos - $this->start_pos;   $this->contents = substr($this->str,$this->start_pos,$this->c_str_l);   return $this->contents;}}///////////////////讀取$file_handle = fopen("$file_name", "r");while (!feof($file_handle)) {   $line = fgets($file_handle);   $sjb=$sjb.$line;}fclose($file_handle);//截取$get_c_str = new get_c_str;$sjb=$get_c_str -> get_str($sjb,'forecast">','margin-bottom');//去除非必要html$sjb=strip_tags($sjb,'<img><p>');//替換$sjb=str_replace('src="/','src="http://yn.weather.com.cn/',$sjb);//轉碼$sjb= mb_convert_encoding($sjb, "GBK", "UTF-8");echo $sjb;?>

小結:上述執行個體中,直接將抓取過來並處理過的$sjb變數直接顯示出來。實際運用中,可以在CMS模板等處調用這個變數。另外有心還可以對內容進行CSS格式化,以達到更好的顯示效果。
本例由深達網站shawn原創,轉載請註明出處。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.