ホームページ  >  記事  >  バックエンド開発  >  PHPで受け取ったバイナリファイルの内容を置き換える方法

PHPで受け取ったバイナリファイルの内容を置き換える方法

WBOY
WBOYオリジナル
2016-06-13 12:44:131091ブラウズ

phpで受け取ったバイナリファイルの内容を置き換える方法
phpで受け取ったバイナリファイルは以下の通りです
header('コンテンツタイプ: text/html; charset=utf-8'); エラー報告(0); $ファイル名 = $_GET["ファイル名"];
$filesize = $_GET["ファイルサイズ"];

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

$raw = $xmlstr;//ポストされたバイナリ生データを取得します
$file = fopen("./upload/".$filename,"w");//ファイルを開いて書き込みの準備をします
fwrite($file,$raw);//書き込み
fclose($file);//閉じる
?>

受信したバイナリ ファイル内の非標準文字のバイト (>0x7F) は 3 バイトに置き換えられます。たとえば、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 />

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。