2

mysql データベースから画像を表示しようとしています。一部の画像は正しく表示されますが、一部は下部がカット/トリミングされて表示され、トリミングされたセクションは空白として表示されます。これは画像の一部になるため、実際には取り除くことができません.

CSS はこれを解決できず、外出先で imagecreate などを使用して画像を再作成しても復元されません。メタ タグを utf-8 に設定しています。私が読んだことから、これは utf-8 bom と関係があるかもしれません。私は基本的に file_get_contents または fopen と fread を使用して画像を取得し、データベースに保存して、header() または base64_encode を使用して出力します。しかし、私はそれをしても、同じ結果が得られます。

これは、ブラウザへの基本的な出力イメージ コードです。

//html form
<form action='' method='post' enctype='multipart/form-data'>
<input type='file' name='image' size='10'>
<input type='submit' name='submit_image' value='Upload' />
</form> 

//table creation
$my_photos = "CREATE TABLE IF NOT EXISTS photos (
id bigint NOT NULL auto_increment,
pic blob NOT NULL,
PRIMARY KEY (id)
) ENGINE=INNODB";

if (mysql_query($my_photos)){
print "Success in photo TABLE creation!";
} else {
print "no photos TABLE created. Debug code!";
}

//get image
$uploaded_image = $_FILES['image'];
$image_tmp = $uploaded_image['tmp_name'];    
$image = file_get_contents($image_tmp); 

//connect and submit image to database
mysql_connect("server","username","password");
mysql_select_db("database");
mysql_query("INSERT IGNORE INTO photos (id, pic) values ('', '".$image."') "); 

//get image from database and output it
$image_query = mysql_query("SELECT * FROM photos WHERE id=1 ");
$image = mysql_fetch_array($image_query);   
header("Content-type: image/jpg/jpeg/gif/png/bmp/JPG");    
echo $image['pic'];

誰かが同様の問題を抱えていて、どのように修正しましたか?

(アプリの一部の画像にファイル システムを使用していますが、この場合は blob が必要です)。

どんな助けでも本当に感謝しています。

4

1 に答える 1

0

Web クライアントから UTF-8 データを処理することは、PHP では困難であり、多くのことを行う必要があります。

最初に、あなたのhtmlページかどうかを確認する必要があります

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

あなたのウェブページにある

あなたの

<form action='' method='post' enctype='multipart/form-data'>

add accept-charset=UTF-8 isn't be correcly here.html コードを確認するには、この投稿の編集を参照してください。

これが生成されたphpである場合も追加します

header('Content-Type: text/html; charset=utf-8');

上に

データベースに接続した後、直後に実行します

mysql_set_charset('utf8')

接続に latin1 ではなく UTF-8 を使用するように php mysql クライアントに指示します。

データを正しく保つために、写真を base64_encoded 文字列として保存する必要があると思います。

修正すべき追加の補足事項

1) mysql_ annymore ではなく mysqli_ を使用する 2) HTML コードは、html 属性の (') を (") に変更します

于 2013-08-12T22:49:57.953 に答える