一个返回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]*则匹配的时候包括换行符的任意字符!