本帖最后由 qq_25293153 于 2015-01-13 15:42:18 编辑

解决方案 »

  1.   

    ...
    $neirong = file_get_contents($url, false, $context);
    echo base64_encode($neirong);贴出结果
      

  2.   


    是一篇文章,结果太长了,我贴一段吧
    77u/ICAgIOiwjeeWlOahteaYlOaZhOixkeebqOaak++8jOmAveS6juWHkeS+k+WyqeeGmueeg+ebqOa0headremAv
      

  3.   


    $c = '77u/ICAgIOiwjeeWlOahteaYlOaZhOixkeebqOaak++8jOmAveS6juWHkeS+k+WyqeeGmueeg+ebqOa0headremAv';
    echo base64_decode($c);
    谍疔桵昔晄豑盨暓,逽于凑侓岩熚瞃盨洅杭��
    沒有亂碼啊。最後那個是因為你的base64 不完整。
      

  4.   


    这个是采集数据地址
    http://www.ziyouge.com/conbdhekbefiab这个是它网站的显示页面
    http://www.ziyouge.com/zy/4/4980/1333249.html采集地址的数据不正常,但它的页面显示正常
      

  5.   

    本帖最后由 fdipzone 于 2015-01-13 22:25:23 编辑
      

  6.   

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

  7.   

    你在輸出的html中加入
    <meta http-equiv="content-type" content="text/html; charset=utf-8">
    它源數據是做了些轉換的,我那個程序已經是轉換過來了。我把採集的也寫出來,直接運行就可以了。<?php  
    //http://www.ziyouge.com/conbdhekbefiab
    //http://www.ziyouge.com/zy/4/4980/1333249.html// 獲取程序$url = 'http://www.ziyouge.com/conbdhekbefiab';$headers['User-Agent'] = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36';
    $headerArr = array();  
    foreach( $headers as $n => $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 );  //构造IP
    curl_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 '<meta http-equiv="content-type" content="text/html;charset=utf-8">';
    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;  
    }   
    ?> 
      

  8.   


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

  9.   

    本地 5.3.28正常,换到服务器5.3.28又出现乱码了
    liunx的环境 ,本地是 ubuntu,服务器是Debian
      

  10.   

    估計與php mb string 的版本有關。
    環境問題只能靠你自己處理了,我這邊沒有這麼多環境。
      

  11.   

    已经发现问题所在。不同平台下
     $str = iconv('UTF-8', 'UCS-2', $str); //这句输出的结果不同//例如:
    $str="幖";
     $str = iconv('UTF-8', 'UCS-2', $str);正常的结果是“V^”;
    不正常的结果是“^V”;
    请教这个该怎么解决
      

  12.   

    找到方法了。。不同平台转换的usc-2编码不同
    对于 UCS-2, linux 下默认是 UCS-2BE。用iconv(指定UCS-2)来转换生成的是 UCS-2BE 的 unicode。如果转换windows平台过来的 UCS-2, 需要指定 UCS-2LE。
      

  13.   

    嗯$str = iconv('UTF-8', 'UCS-2', $str);
    改為
    $str = iconv('UTF-8', 'UCS-2LE', $str);就可以了。
      

  14.   

    其实根本就没那么复杂$content = file_get_contents('密文.txt');
    $ignore = unpack('v*', iconv('utf-8', 'ucs-2le', '“”!…:,,'));
    $ar = unpack('v*', iconv('utf-8', 'ucs-2le', $content));
    $result = '';
    foreach($ar as $v) {
      if(! in_array($v, $ignore)) $v -= 100;
      $result .= iconv('ucs-2be', 'utf-8', pack('n', $v));
    }
    echo $result;
    他不过是将两个字节前后倒一下