2012-01-05 2 views
0

私はscreen.jsとtest.phpの2つのファイルを持っています。jsからPHPへの変数の転記、PHPでの奇妙なencode64の状況?

<?php 
if (isset($_POST['img'])) { 
$img = $_POST['img']; 
$comma = strpos($img, ','); 
$data = substr($img, $comma+1); 
file_put_contents('MyFile.jpg', base64_decode($data)); 
} 
?> 

は、私は2つの状況があります: 私はtest.phpを、このシンプルなPHPコードを持って

  1. 私はscreen.jsから文字列をbase64として、JPGファイルが含まれているAjaxのIMGの変数を経由して送信test.phpにスクリプトはサーバ側でファイルを保存しますが、私はそれを開くことができません。私は開いている間にエラーが発生しました! :(

  2. 私は私がコピーすると、変数に何が含まれているかのimg知っているとIMG変数の内容を貼り付け、everytingはokです以下のようにtest.phpをに保存screen.jsをデバッグしながら。

    場合( ISSET($ _ POST [ 'IMG'])){ の$ DATA2 = '/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAMCAgMC...etc。'; ますfile_put_contents( 'MyFile.jpg'、BASE64_DECODE($のDATA2));}

何が問題なのですか。

+0

おそらく、コード化された完全な文字列が転送されていない可能性があります.AJAXが送信した文字列の長さを確認しましたか?彼らは同じですか? – abhinav

+0

はい私は同じ長さをチェックし、違いはありません。 –

答えて

1

Base64でエンコードされたデータには+記号が含まれることがあります。データを通常のURLでエンコードされたパラメータとして送信している場合、phpは+をあなたが望むものとは明らかに異なる空間にデコードします。

+0

デコード後、文字列をスペースに置き換える必要があります。 –

+0

base64をデコードする前に、スペースを '+'に置き換える必要があります。 –

+0

はい私は今すべて知っている知っている:) –