php截取指定字符之間內容的類與實例(含轉碼、過濾html等)

 像我這樣的半拉子程序員,基本靠百度一下。基本是在前輩們的寶貴經驗基礎上,根據現在的需要進行整合、修改。因此首先鳴謝。聲明:知識來源並不代表原創來源,只代表本人從該處找到該知識。
第一部分、基礎知識點
1、一個php截取指定字符串之間的字符串的類
  1. <?php  
  2. class get_c_str {  
  3. var $str;  
  4. var $start_str;  
  5. var $end_str;  
  6. var $start_pos;  
  7. var $end_pos;  
  8. var $c_str_l;  
  9. var $contents;  
  10. function get_str($str,$start_str,$end_str){  
  11.    $this->str = $str;  
  12.    $this->start_str = $start_str;  
  13.    $this->end_str = $end_str;  
  14.    $this->start_pos = strpos($this->str,$this->start_str)+strlen($this->start_str);  
  15.      $this->end_pos = strpos($this->str,$this->end_str);  
  16.    $this->c_str_l = $this->end_pos - $this->start_pos;  
  17.    $this->contents = substr($this->str,$this->start_pos,$this->c_str_l);  
  18.    return $this->contents;  
  19. }  
  20. }  
  21. ?>  
讚歎高人,這麼厲害的功能用短短几行代碼就搞定。同時再次感謝奉獻精神。
上述類的使用方法:
<?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 編碼字串
  1. <?php      
  2. header("content-Type: text/html; charset=Utf-8");      
  3. echo mb_convert_encoding("你是我的好朋友""UTF-8""GBK");      
  4. ?>     

b、把 UTF-8 編碼字串轉換成 GB2312 編碼字串
  1. // 注意將此文件存盤成   utf-8 編碼格式文件再測試      
  2. <?php      
  3. header("content-Type: text/html; charset=gb2312");      
  4. echo mb_convert_encoding("你是我的好朋友""gb312""utf-8");      
  5. ?>      
*注意:使用mb_convert_encoding 函數需啓用PHP 的mbstring (multi-byte string)擴展

c、對整個頁面 進行轉換
該方法適用所有編碼環境。把前128個字符以外(顯示字符)的字符集都用 NCR (Numeric character reference,如“漢字”將轉換成“&amp;#27721;&amp;#23383;”這種形式)來表示,這樣的編碼在任意編碼環境下頁面都能正常顯示。
方法是在php文件的頭部加上下面三行代碼:
  1. <?php  
  2. mb_internal_encoding("gb2312");  // 這裏的gb2312是你網站原來的編碼      
  3. mb_http_output("HTML-ENTITIES");      
  4. ob_start('mb_output_handler');   
  5. ?>  



二、應用實例
本實例的目的是把某網頁的某個部分抓取下來,處理成可以調用的變量,或更加符合使用要求的格式。
  1. <?  
  2. //基本變量*獲取數據源,可爲網頁,也可以是本地文本文件及網頁  
  3. $file_name="http://yn.weather.com.cn/lijiang/index.shtml";  
  4. //截取函數  
  5. class get_c_str {  
  6. var $str;  
  7. var $start_str;  
  8. var $end_str;  
  9. var $start_pos;  
  10. var $end_pos;  
  11. var $c_str_l;  
  12. var $contents;  
  13. function get_str($str,$start_str,$end_str){  
  14.    $this->str = $str;  
  15.    $this->start_str = $start_str;  
  16.    $this->end_str = $end_str;  
  17.    $this->start_pos = strpos($this->str,$this->start_str)+strlen($this->start_str);  
  18.      $this->end_pos = strpos($this->str,$this->end_str);  
  19.    $this->c_str_l = $this->end_pos - $this->start_pos;  
  20.    $this->contents = substr($this->str,$this->start_pos,$this->c_str_l);  
  21.    return $this->contents;  
  22. }  
  23. }  
  24. ///////////////////讀取  
  25.   
  26. $file_handle = fopen("$file_name""r");  
  27. while (!feof($file_handle)) {  
  28.    $line = fgets($file_handle);  
  29.    $sjb=$sjb.$line;  
  30. }  
  31. fclose($file_handle);  
  32. //截取  
  33. $get_c_str = new get_c_str;  
  34. $sjb=$get_c_str -> get_str($sjb,'forecast">','margin-bottom');  
  35. //去除非必要html  
  36. $sjb=strip_tags($sjb,'<img><p>');  
  37. //替換  
  38. $sjb=str_replace('src="/','src="http://yn.weather.com.cn/',$sjb);  
  39. //轉碼  
  40. $sjb= mb_convert_encoding($sjb"GBK""UTF-8");  
  41. echo $sjb;  
  42. ?>  

小結:上述實例中,直接將抓取過來並處理過的$sjb變量直接顯示出來。實際運用中,可以在CMS模板等處調用這個變量。另外有心還可以對內容進行CSS格式化,以達到更好的顯示效果。
本例由深達網站shawn原創,轉載請註明出處。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章