首页 > 后端开发 > php教程 > php接收二进制文件如何替换里面的内容

php接收二进制文件如何替换里面的内容

WBOY
发布: 2016-06-13 12:44:13
原创
1101 人浏览过

php接收二进制文件怎么替换里面的内容
php接收二进制文件如下:
header('Content-type: text/html; charset=utf-8'); 
error_reporting(0); 
$filename = $_GET["filename"];
$filesize = $_GET["filesize"];

$xmlstr =  $GLOBALS[HTTP_RAW_POST_DATA];//$_POST["data"];//
if(empty($xmlstr)) $xmlstr = file_get_contents('php://input');

$raw = $xmlstr;//得到post过来的二进制原始数据
$file = fopen("./upload/".$filename,"w");//打开文件准备写入
fwrite($file,$raw);//写入
fclose($file);//关闭
?>

接收的二进制文件中非标准字符(>0x7F)的字节被替换为三个字节,比如E2替换为EF 9F A2
现在我想在Php接收到文件之后还原回去,把EF 9F A2替换为E2,请问这个怎么实现?

非常感谢!

PHP 二进制
------解决方案--------------------
他的数据转换规则是这样的:
文件头不变,文件头多长不清楚,图上到0050h都一样的
>=80的字节,高位加上F7,再转utf-8,例如E2就变成F7E2然后转utf-8成为EF 9F A2

至少他图中E2/FB/91/B2/81...都满足这个规则
------解决方案--------------------
本帖最后由 xuzuning 于 2013-05-02 15:35:02 编辑 用正则可这样写
假定数据已把存在变量 $s 中,则
$s = preg_replace_callback('/[\xef]../', 'foo', $s);<br />
function foo($r) {<br />
  $c = (ord($r[0]{1}) & 0x03) << 6;<br />
  $c += (ord($r[0]{2}) & 0x3f);<br />
  return chr($c);<br />
}<br />
登录后复制

相关标签:
来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板