就一个解密的代码,想输出为XML,明明里面没有十六进制的字符啊,为什么就是出错呢,有知道的大神,请解答一下,请给出个解决方法。源码如下:<?php 
header('Content-Type: text/xml; charset=UTF-8');      $str="y5tFW6uGbrvwKrmJhRUNPT2vTfpExJwAPuhtUzMJ99xG/DuG+7qfF2TcTuP6io1cNNgCQl6XhsfJ4oLrX2TVFg==";
      $key = "bf2bbf11"; 
      $iv = "3c8b6ae0";
      $arr = mcrypt_module_open(MCRYPT_3DES, '', 'cbc', '');
      mcrypt_generic_init($arr, $key, $iv);
      $str = base64_decode($str);        
      $pa = mdecrypt_generic($arr, $str);
      mcrypt_generic_deinit($arr);
      mcrypt_module_close($arr);  $urllist2 .=' <ck>';
$urllist2 .=' <![CDATA['.$pa.']]>';
$urllist2 .=' </ck>';
echo $urllist2;
?>提示,error on line 1 at column 15: Input is not proper UTF-8, indicate encoding !
Bytes: 0x08 0x08 0x08 0x08正确解密出地址http://flv1.vodfile.m1905.com/movie/6aNvv0RbK44trimy.flv,里面没有包含什么十六进制的字符啊,百思不得其解了。

解决方案 »

  1.   

    解码后 $pa 尾部有 8 个 “\x08"
    删掉即可$pa = trim($pa, "\x08");
    $pa = trim($pa, chr(8)),
    $pa = substr($pa, 0, -8);都可以
      

  2.   


    可是有一些地址解密出来,又包含了 0x02或0x5D之类的,请问有什么办法直接把所有的十六进制字符都去掉呢?
      

  3.   

    应该都是多 8 个字符吧?
    你先统一用 $pa = substr($pa, 0, -8); 观察一下
      

  4.   


    规律不同,所以最后根据你的提示,我用了$pa = substr($pa,0,strripos($pa,'.')+4); 解决了
    但是这个也不知道是否还会有其他变化,导致出错,所以还是不管它后面跟着几个字符,统一干掉比较靠谱点。但是找了下资料,都不是很全面,连XML不能包含的十六进制的所有字符都没有说清楚,还是个问题啊