PHP和字符集,正則表達式,以及最近做出來的程序

上次說到做關於選課網的軟件。現在說幹就幹了~

 

大概思路說是:

通過某特定頁面獲取返回信息,然後再從HTML文本里截取東西。

看似很簡單的東西,做起來可不容易。

 

 

首先CURL搞得不錯(多虧當年用了幾天搞出來的新PHP),得到頁面很隨意。

之後是去HTML標記和各種空格,函數如下:

string strip_tags(string $htmlpage);  //去HTML標記,還可以加參數,要求保留某些標記

string preg_replace("//s/","",$str);    //去除str中一切空白字符,什麼tab,什麼空格,什麼換行。。這樣的好處就是把所有文字都邊成一片了。。。。

 

之後是內容的摘取。

原來也想用正則表達式來着,perl兼容的正則表達式似乎很高效也很NB,而ereg比較弱,也稍微簡單點。

     但是蛋疼的是,PHP中如果要正則中文,就要用16進制編碼來找它們。。。於是用了一晚上探究其中原因

     事實上PHP什麼的雖然都可以顯示中文頁面,但它的字符處理都是按單字節字符處理的…然而GB2312或者GBK中,漢字都是雙字節表示,於是你要想處理漢字,必須將漢字想象成2個BT的單字符組成的東西…而在UTF-8中,因爲支持的字符更多,它用三個字節表示字符…於是換算變得更加複雜。。。。

     正當我想放棄的時候,mb_打頭的函數給我了線希望──它幫我搞定了所有寬字符的問題,只要記得UTF8中的中文是3個字節就OK了。但是perg不支持這種東西,只有mb_ereg系列。。。。在我試驗N次蛋疼無數之後,決定不用正則了。。自己寫字符串操作吧!

大概用到了以下幾個函數:

 

需要注意的是,所有數字的表示,都認爲漢字是3個字符(UTF8下),所以如果要截3個漢字,應該讓$lenth=9纔可以。

 

然後用FOR循環讀取N多網頁,感覺速度還是很快的,30秒能顯示1000多條。。。設計得當的話,估計還是可以用起來的。

 

值得一提的是,PHP裏的數組太給力了!它的標號可以是有意義的名字,類似c中的結構體一樣了。。。

比如:

 

 

下一步計劃:從csv文件中讀取一學期的所有課程到數據庫,裏面有寶貴的上課時間,之後通過課程ID來與網上的數據聯繫。

至少要建立2個表了。。。從現在的情況來看。。。。

但是最鬱悶的是在發送網頁請求的時候,需要使用bsid=xxxxxxxx,是一個6位的數字,這個實在是沒規律,只能窮舉了…

除非。。。找到網絡中心。。。。。算了。。。

 

希望日後能順利一些!

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章