
php模拟登陆抓取数据,无法用正则表达式匹配中文
模拟登陆学校教务处网站,教务处是asp.net,编码是GB2312,我是PHP,header编码改成GB2312(不然完全匹配不了……)现在的问题是,虽然能够匹配英文,但...
模拟登陆学校教务处网站,教务处是asp.net,编码是GB2312,我是PHP,header编码改成GB2312(不然完全匹配不了……)
现在的问题是,虽然能够匹配英文,但仍然无法匹配中文字符串,但我看php100第88讲21:55秒的教程他就可以使用`preg_match("/<li>金钱:(.*)<\/li>/",,$web,$arr);`抓取数据值为“100”【其中有“金钱”】
而我`preg_match("/\d{10}<\/b>(.*)\)/",$web,$arr)`可以获取值为“1234567890(名字、男 所在的学院,学院班级124)”
但我现在想单独取出名字,只要preg_match中出现了中文,例如preg_match("/(.*)男(.*)/",$web,$arr)都会直接失败
或者是
preg_match("/><TD width=680>(.*)<b>/",$contents,$arr)
ehco arr[1]
输出的是“用户类别:在校学生 用户标识:1234567890(名字、男 所在的学院,学院班级124) 状态:已审核、”
但是我一旦改为
preg_match("/><TD width=680>(.*)用户(.*)<b>/",$contents,$arr)
就找不到值了,意思就是只要涉及汉子就会查找不到。
我用tester软件测试是能够找到的,视频教程这么写应该说明也是能够做到的,我去看php100论坛(教程88的例子)他页面是GBK编码方式,我觉得应该不是这个问题?
希望能够解答!还描述不够详细的QQ:420648227希望能够联系我帮助一下,不甚感激! 展开
现在的问题是,虽然能够匹配英文,但仍然无法匹配中文字符串,但我看php100第88讲21:55秒的教程他就可以使用`preg_match("/<li>金钱:(.*)<\/li>/",,$web,$arr);`抓取数据值为“100”【其中有“金钱”】
而我`preg_match("/\d{10}<\/b>(.*)\)/",$web,$arr)`可以获取值为“1234567890(名字、男 所在的学院,学院班级124)”
但我现在想单独取出名字,只要preg_match中出现了中文,例如preg_match("/(.*)男(.*)/",$web,$arr)都会直接失败
或者是
preg_match("/><TD width=680>(.*)<b>/",$contents,$arr)
ehco arr[1]
输出的是“用户类别:在校学生 用户标识:1234567890(名字、男 所在的学院,学院班级124) 状态:已审核、”
但是我一旦改为
preg_match("/><TD width=680>(.*)用户(.*)<b>/",$contents,$arr)
就找不到值了,意思就是只要涉及汉子就会查找不到。
我用tester软件测试是能够找到的,视频教程这么写应该说明也是能够做到的,我去看php100论坛(教程88的例子)他页面是GBK编码方式,我觉得应该不是这个问题?
希望能够解答!还描述不够详细的QQ:420648227希望能够联系我帮助一下,不甚感激! 展开
1个回答
展开全部
header()函数是输出到HTTP头,和你这个问题是没有关系的。
真正相关的,是你的源代码的编码方式。
我举个例子,若源代码文件是采用UTF8编码,那么你在抓取到页面后,先要进行编码转换到UTF8!
如,使用iconv:
若抓取到的页面存放在$contents中:那么运行$contents=iconv('gb2312','utf-8//IGNORE',$contents);//参数中的IGNORE是忽略错误
这样再进行正则匹配才行。
当然匹配出来的结果也需要用UTF8来正常显示,所以header()那部分就不用去掉了。
真正相关的,是你的源代码的编码方式。
我举个例子,若源代码文件是采用UTF8编码,那么你在抓取到页面后,先要进行编码转换到UTF8!
如,使用iconv:
若抓取到的页面存放在$contents中:那么运行$contents=iconv('gb2312','utf-8//IGNORE',$contents);//参数中的IGNORE是忽略错误
这样再进行正则匹配才行。
当然匹配出来的结果也需要用UTF8来正常显示,所以header()那部分就不用去掉了。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询