一個返回ip地址的get,在頁面上的數據如下
我想得到lo的值和lc的值,用PHPzheng標示爲:/.*lo="(.*)",.*/;然後獲取$1的值就可以了,不過在測試的過程中老是不能出現正確的lo,我就不得不輸出獲得的這個值來看,結果一看,竟然是亂碼,然後我又用語句:
iconv('GB2312','UTF-8',$string);
把編碼轉換成和頁面和數據庫一致的編碼方式UTF8,然後再輸出的時候顯示正確,解決了亂碼的問題。但是在用正則匹配的時候還是不行,真是遇了個悶。
然後我突然靈機一動!會不會因爲返回值中含有換行符!然後我看了一下源代碼:
果不其然,返回的頁面中含有換行符。如果用js獲取直接使用eval就行了,但是這個php啊,有時候處理數據起來還真得在正則表達式上下一番功夫。那麼發現了問題的根源,現在就着手解決問題。
後面加上[\s\S]進行包括換行符在內的任意字符的匹配。正則變爲:
/.*lo="(.*)",[\s\S]/;
Yes,匹配成功!
總結:
1.get數據源的時候看看源代碼是否有換行符
2.中文亂碼時,一定要把編碼方式通過iconv改成一致!
3..*通常情況下匹配的時候不含有換行符的任意字符。[\s\S]*則匹配的時候包括換行符的任意字符!