2

しばらくお待ちください。この問題を確認してください。

画像をアップロードするための簡単な PHP コードをいくつか書きました。

これがコードです(スニペット)

 <?php

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

//set encoding for prepared statements
$dbh->exec("SET NAMES UTF8");
$dbh->query('SET NAMES UTF8');

//check if file is actually an image etc.

//send image to "upload" folder
     move_uploaded_file($_FILES["file"]["tmp_name"],"upload/" . $_FILES["file"]["name"]);

//save to the database a string like "upload/myImage.jpg", so I can render it on the site later
$stu = $dbh->prepare("UPDATE multi SET m_place=:name WHERE m_id = :id");
$stu->bindParam(':name', $n, PDO::PARAM_STR);
$n= "upload/".$_FILES["file"]["name"];                                          
$stu->execute();

画像の名前が英語であれば問題ありません。がギリシャ語の場合、データベースには正常に保存されましたが、フォルダーには保存されませんでした。私が見るデータベースではχωρις τιτλο.jpg(これは正しい)、フォルダχωΟΞ―Ο‚ τίτλο.jpgでは間違っています。

私はすべてを試しましたが、これを修正できません。フォルダ内の適切なタイトルを取得するには。

データベース (postgreSQL 9.1) のエンコーディングは UTF8、照合順序と文字タイプはGreek_Greece.1235. 画像のタイトルを保存するテーブルの列のコレクションは ですpg_catalog."C"

ドリームウィーバーを使用しています。アップロードを処理するファイルは php ファイルです。エンコーディングは utf8、Unicode 正規化形式は C、Include Unicode Signature (BOM) はチェックされていません。

デフォルトの言語は、地域ではギリシャ語、コントロール パネルでは言語です。(Windows 7 ホーム プレミアム)

ブラウザのエンコーディングはutf8です

Apache 2.2.22 も使用しています。それはApacheのせいですか?それともphpファイルですか?それともデータベース?

他に何をすべきかわかりません...何が欠けていますか?どうかどうかアドバイスをお願いします

4

3 に答える 3

1

結局のところ、私はすべてを試したわけではありません。

これのおかげで解決策が見つかりました。

それはPHPと、「PHPファイルシステム関数はシステムコードページにある文字のみを処理できる」方法に関係しています

ということで機能を利用しましたiconv

私はそのようにコードを変更しました

move_uploaded_file($_FILES["file"]["tmp_name"],"upload/" . iconv('UTF-8', 'Windows-1253',$_FILES["file"]["name"]));
于 2013-09-26T18:32:08.537 に答える
1

これは StackOverflow の問題のようで、ServerFault とは関係ありません。ただし、次の投稿をご覧ください。

UTF-8 でファイルに名前を付ける場合:

PHPファイル名(またはフルパスのディレクトリ)にUTF-8文字を使用できますか?

UTF-8 でファイルを書き込む場合:

ファイルをUTF-8形式で書き込むには?

于 2013-09-25T01:59:19.450 に答える