中易网

php采集utf-8网页乱码

答案:3  悬赏:70  
解决时间 2021-02-02 08:24
我用php采集utf-8网页入库成乱码。采集gb2312的正确。程序网页编码utf-8数据库编码utf-8如果采集的网页的编码是gb2312那么就不是乱码,utf-8的就是乱码。<br>==============================<br>&lt;?<br>    //得到参数<br> $url1=trim($_REQUEST[&quot;url1&quot;]);<br> $url2=trim($_REQUEST[&quot;url2&quot;]);<br> $url3=trim($_REQUEST[&quot;url3&quot;]);<br>    $reg=trim($_REQUEST[&quot;reg&quot;]);<br><br>$ip=trim($_REQUEST[&quot;ip&quot;]);<br>    $database=trim($_REQUEST[&quot;database&quot;]);<br>    $bm=trim($_REQUEST[&quot;bm&quot;]);<br> $table=trim($_REQUEST[&quot;table&quot;]);<br> $uid=trim($_REQUEST[&quot;uid&quot;]);<br> $pwd=trim($_REQUEST[&quot;pwd&quot;]);<br><br> $zd_reg=$_REQUEST[&quot;zd_reg&quot;];<br> $zd_zhi=$_REQUEST[&quot;zd_zhi&quot;];<br><br>if(empty($zd_reg) || empty($zd_zhi))<br> {<br>  ?&gt;<br>  &lt;script language=&quot;javascript&quot;&gt;<br>   alert(&quot;获取地方没有正则或数据库没有字段&quot;);<br>   history.back(-1);<br>  &lt;/script&gt;<br>  &lt;?php<br> }<br> else<br> {<br>  //数据库连接<br>  $conn=mysql_connect($ip,$uid,$pwd);<br>  if(!$conn)<br>  {<br>   echo &quot;数据库连接失败&quot;;<br>  }<br>  else<br>  {<br>   mysql_select_db($database,$conn);<br>   mysql_query(&quot;SET NAMES UTF8&quot;);<br><br>   //读取页面数据<br>   $index_content = file_get_contents($url1);<br>   preg_match_all($reg,$index_content,$title);<br>   $count =count($title[1]);<br>   if($count&gt;0)<br>   {<br>    $d=0;  //计数计算得到的数据条数<br>    for($i=0;$i&lt;$count;$i++)<br>    {<br>     //得到内页的网站数据<br>     $aurl = $url2.$title[1][$i].$url3;<br>     $acount = file_get_contents($aurl);   <br><br>     //插入到数据库中<br>     $sql=&quot;insert into `&quot;.$table.&quot;`(&quot;;<br>     foreach($zd_reg as $key =&gt;$val_reg)<br>     {<br>      if($key!=count($zd_reg)-1)<br>      {<br>       $sql.=&quot; `&quot;.$zd_zhi[$key].&quot;`,&quot;;<br>      }<br>      else<br>      {<br>       $sql.=&quot; `&quot;.$zd_zhi[$key].&quot;`&quot;;<br>      }  <br>     }<br>     $sql.=&quot;) values(&quot;;<br><br>     $null=0;    //如果采集的任意字段有控制那么不插入数据库中<br>     foreach($zd_reg as $key =&gt;$val_reg)<br>     {<br>      preg_match($val_reg,$acount,$val_arr);<br>      $val=$val_arr[1];<br>      if($val==&quot;&quot;)<br>      {<br>       $null=1;<br>      }<br>      else<br>      {<br>       iconv(&quot;UTF-8&quot;,&quot;gb2312&quot;,$val);<br>      }<br><br>      $val=addslashes($val);<br><br>      if($key!=count($zd_reg)-1)<br>      {<br>       $sql.=&quot; '$val',&quot;;<br>      }<br>      else<br>      {<br>       $sql.=&quot; '$val'&quot;;<br>      }<br>     }<br>     $sql.=&quot;)&quot;;<br>     if($null!=1)<br>     {<br>      if(mysql_query($sql,$conn))<br>      {<br>       $d++;<br>      }<br>     }<br>    }<br><br>    ?&gt;<br>    &lt;script language=&quot;javascript&quot;&gt;<br>     alert(&quot;共采集到&lt;?=$d?&gt;条数据&quot;);<br>     //history.back();<br>    &lt;/script&gt;<br>    &lt;?php<br><br>   }<br>   else<br>   {<br>    ?&gt;<br>    &lt;script language=&quot;javascript&quot;&gt;<br>     alert(&quot;没有采集到超级连接&quot;);<br>     history.back();<br>    &lt;/script&gt;<br>    &lt;?php<br>   }<br>  }<br> }<br>    ?&gt;<br><br>我数据库是utf-8的。<br>听说在获得网页数据时要进行编码转换,不知道怎么转换,什么时候需要转换。<br><br>$acount = mb_convert_encoding($acount,&quot;utf-8&quot;,&quot;gb2312&quot;);<br>我是这样的。<br><br>==采集时网页要过时,怎么设置不过时。php
最佳答案
脚本运行的最前面加上一句 set_time_limit(0); 设置不超时

iconv 或者mb_convert_encoding转码。获取过内容的时候就将得到的字符串转为你想要的编码。
全部回答
<head> <meta http-equiv="content-Type" content="text/html; charset=utf-8"> </head>
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
marryyou什么意思
莆一中今年的录取分数线大概会是多少?
昨天煮甜洒好多流到地板砖上面黏的很,怎么清
怎么开启笔记本睡眠功能
c#.net 想要实现这个功能:在网页上播放PPT
要运行creo2.0电脑至少要什么配置?
东门街小区地址有知道的么?有点事想过去
求通达信选股公式:今日涨幅大于前一日涨幅
大光明发艺怎么去啊,有知道地址的么
Stereoscopic Player 如何注册?求各位老大帮
微墨宝文具店在哪里啊,我有事要去这个地方
体育老师买回足球和排球344个,足球是排球的三
******@lianli是什么邮箱
梯门村在哪里啊,我有事要去这个地方
通信信号研究设计院怎么样
推荐资讯
请用“内外因辩证关系的原理”谈一下应该如何
同心家园这个地址在什么地方,我要处理点事
30-4(x-5)二2X-16
如果y=5分之x,那么x和y成什么比例??QAQ急
行行行综合商店在什么地方啊,我要过去处理事
求霸王硬上弓动漫
我是山东的,做童装批发生意,青岛,广州,湖
Dacom2.1蓝牙耳机多少钱一个?
刘叔叔把9000元存入银行,存期一年,年利率是
乐山家兴串串香在哪里啊,我有事要去这个地方
你用同样的话问别人,别人每次都回答不同。那
我的户口在一家国企集体户里,现在换了单位了
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?