php获取请求的数据乱码,php 获取数据乱码问题

file_get_contents 采集一个页面的数据,获取的数据是乱码,已经使用了检测编码的方式,

检测的是utf-8,我的页面编码也是utf-8,但是还是显示乱码,不知道为什么

$url="xxx";$opts = array( 'http'=>array( 'user_agent' => "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)", ) ); $context = stream_context_create($opts); $neirong = file_get_contents($url, false, $context); header("content-Type: text/html; charset=Utf-8"); ob_end_flush(); $encode = mb_detect_encoding($neirong, array("ASCII","UTF-8","GB2312","GBK","BIG5")); echo $encode."

";if ($encode!="UTF-8"){ $neirong=mb_convert_encoding($neirong, "UTF-8", $encode); } echo $neirong;

$encode 输出:utf-8

$neirong 输出是乱码

我的页面编码是utf-8

回复讨论(解决方案)

...$neirong = file_get_contents($url, false, $context);echo base64_encode($neirong);

贴出结果

...$neirong = file_get_contents($url, false, $context);echo base64_encode($neirong);

贴出结果

是一篇文章,结果太长了,我贴一段吧

77u/ICAgIOiwjeeWlOahteaYlOaZhOixkeebqOaak++8jOmAveS6juWHkeS+k+WyqeeGmueeg+ebqOa0headremAv

$c = '77u/ICAgIOiwjeeWlOahteaYlOaZhOixkeebqOaak++8jOmAveS6juWHkeS+k+WyqeeGmueeg+ebqOa0headremAv';echo base64_decode($c);

谍疔?昔????,?于凑?岩????杭??

?有??啊。最後那?是因?你的base64 不完整。

$c = '77u/ICAgIOiwjeeWlOahteaYlOaZhOixkeebqOaak++8jOmAveS6juWHkeS+k+WyqeeGmueeg+ebqOa0headremAv';echo base64_decode($c);

谍疔?昔????,?于凑?岩????杭??

?有??啊。最後那?是因?你的base64 不完整。

正确的输出应该是 “让田树新无语的是,这个六伯居然真的没有这方面的意思。 ”

是乱码啊

把?集的地址?出?。

把?集的地址?出?。

这个是采集数据地址

http://www.ziyouge.com/conbdhekbefiab

这个是它网站的显示页面

http://www.ziyouge.com/zy/4/4980/1333249.html

采集地址的数据不正常,但它的页面显示正常

需要??集的??做些?理才行。=224){$result .= change(mb_substr($content,$i,3));$i=$i+3;}else{$result .= mb_substr($content,$i,1);$i=$i+1;}}echo $result;// ?理function change($str){$ignore = array('“','”','!','…',':',',',',');if(in_array($str, $ignore)){return $str;}$prefix = "%u";$postfix = ""; $str = iconv('UTF-8', 'UCS-2', $str); $arrstr = str_split($str, 2); $unistr = ''; for($i = 0, $len = count($arrstr); $i < $len; $i++) { $tmp = hexdec(bin2hex($arrstr[$i]));$tmp = str_pad(dechex($tmp),4,'0',STR_PAD_LEFT);$tmp = decrypt(substr($tmp,2,2).substr($tmp,0,2));$unistr .= $prefix . $tmp . $postfix; }return unescape($unistr);}// 解密function decrypt($d){$result .= str_pad(dechex(hexdec($d)-100),4,'0',STR_PAD_LEFT);return $result;}// ?中文function unescape($str) { $ret = ''; $len = strlen ( $str ); for($i = 0; $i < $len; $i ++) { if ($str [$i] == '%' && $str [$i + 1] == 'u') { $val = hexdec ( substr ( $str, $i + 2, 4 ) ); if ($val < 0x7f) $ret .= chr ( $val ); else if ($val < 0x800) $ret .= chr ( 0xc0 | ($val >> 6) ) . chr ( 0x80 | ($val & 0x3f) ); else $ret .= chr ( 0xe0 | ($val >> 12) ) . chr ( 0x80 | (($val >> 6) & 0x3f) ) . chr ( 0x80 | ($val & 0x3f) ); $i += 5; } else if ($str [$i] == '%') { $ret .= urldecode ( substr ( $str, $i, 3 ) ); $i += 2; } else $ret .= $str [$i]; } return $ret; } ?>

已经是晚上十一点了,路边的拍档基本?什么人了,不过还有三货依然喝的兴高采烈的,而且大有不干到天明,誓不罢休的意思,

fdipzone ,用你的方法还是输出的乱码,对解密不太了解

你在?出的html中加入

它源??是做了些??的,我那?程序已?是????了。

我把?集的也?出?,直接?行就可以了。$v ) { $headerArr[] = $n .':' . $v; }$ch = curl_init();curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_HTTPHEADER , $headerArr ); //构造IPcurl_setopt($ch, CURLOPT_REFERER, 'http://www.ziyouge.com/'); //构造来路$content = curl_exec($ch);$content = substr($content,3);if($error=curl_error($ch)){die($error);}curl_close($ch);// 分析程序$result = '';$str_length = mb_strlen($content);$i=0;while ($i<=$str_length){$temp_str=mb_substr($content,$i,1);$ascnum=Ord($temp_str);if ($ascnum>=224){$result .= change(mb_substr($content,$i,3));$i=$i+3;}else{$result .= mb_substr($content,$i,1);$i=$i+1;}}echo '';echo $result;// ?理function change($str){$ignore = array('“','”','!','…',':',',',',');if(in_array($str, $ignore)){return $str;}$prefix = "%u";$postfix = ""; $str = iconv('UTF-8', 'UCS-2', $str); $arrstr = str_split($str, 2); $unistr = ''; for($i = 0, $len = count($arrstr); $i < $len; $i++) { $tmp = hexdec(bin2hex($arrstr[$i]));$tmp = str_pad(dechex($tmp),4,'0',STR_PAD_LEFT);$tmp = decrypt(substr($tmp,2,2).substr($tmp,0,2));$unistr .= $prefix . $tmp . $postfix; }return unescape($unistr);}// 解密function decrypt($d){$result = str_pad(dechex(hexdec($d)-100),4,'0',STR_PAD_LEFT);return $result;}// ?中文function unescape($str) { $ret = ''; $len = strlen ( $str ); for($i = 0; $i < $len; $i ++) { if ($str [$i] == '%' && $str [$i + 1] == 'u') { $val = hexdec ( substr ( $str, $i + 2, 4 ) ); if ($val < 0x7f) $ret .= chr ( $val ); else if ($val < 0x800) $ret .= chr ( 0xc0 | ($val >> 6) ) . chr ( 0x80 | ($val & 0x3f) ); else $ret .= chr ( 0xe0 | ($val >> 12) ) . chr ( 0x80 | (($val >> 6) & 0x3f) ) . chr ( 0x80 | ($val & 0x3f) ); $i += 5; } else if ($str [$i] == '%') { $ret .= urldecode ( substr ( $str, $i, 3 ) ); $i += 2; } else $ret .= $str [$i]; } return $ret; } ?>

你在?出的html中加入

它源??是做了些??的,我那?程序已?是????了。

我把?集的也?出?,直接?行就可以了。

[/code]

出现乱码是因为php版本不同,我在5.3.28测试正常,在PHP 6.0.0-dev 中测试就是乱码,是不是PHP 6.0.0-dev缺少了什么组件

可能吧,dev版。。

可能吧,dev版。。

本地 5.3.28正常,换到服务器5.3.28又出现乱码了。。。

liunx的环境 ,本地是 ubuntu,服务器是Debian

估??php mb string 的版本有?。

?境??只能靠你自己?理了,我???有??多?境。

估??php mb string 的版本有?。

?境??只能靠你自己?理了,我???有??多?境。

已经发现问题所在。不同平台下

$str = iconv('UTF-8', 'UCS-2', $str); //这句输出的结果不同

//例如:$str="?"; $str = iconv('UTF-8', 'UCS-2', $str);正常的结果是“V^”;不正常的结果是“^V”;请教这个该怎么解决

找到方法了。。不同平台转换的usc-2编码不同

对于 UCS-2, linux 下默认是 UCS-2BE。用iconv(指定UCS-2)来转换生成的是 UCS-2BE 的 unicode。如果转换windows平台过来的 UCS-2, 需要指定 UCS-2LE。

$str = iconv('UTF-8', 'UCS-2', $str);

改?

$str = iconv('UTF-8', 'UCS-2LE', $str);

就可以了。

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值