PHP サーバーの小さな cms に画像をアップロードしていますが、「1372609671-Terrassenböden Watrawood.jpg」というファイルがあり、深刻な問題が発生しています。私はすべてを自分のMacにダウンロードし、すべてをデバッグしました...それに直面しています:
私のmysqlテーブルでは、すべて問題ないように見えます.「ö」は「ö」と表示され、正確なファイル名で検索クエリを書くとファイルを見つけることができます:
しかし、私の php コードは失敗し、同じクエリを実行します。を使用してファイルシステムからファイル名を取得するとreaddir
、結果のクエリは奇妙に思えます:
お気づきのように、「ö」はもはや本当の「ö」ではありません.. 少し大きいですが、大きな「Ö」ほど大きくはありません.. カーソルでさえ楽しいです, 文字の途中で止まることができます. 、次にヒットBackspaceして文字を削除すると、最初にその上のポイントが削除され、2回目に残りの「o」が削除されます..
たとえば、rawurlencode
これ
を使用してファイル名を変換すると、次のようになります。
utf-8 が始まる前に "o" が表示されます..そして %CC がドットを与え、%88 がスペースのようなものを与えます...これは一体何ですか? これを単純な utf-8 "ö" にするにはどうすればよいでしょうか。これを検索クエリに使用しても意味がありません.. :-/
詳細については、データベース スキーマ:
CREATE SCHEMA IF NOT EXISTS `cms` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci ;
DROP TABLE IF EXISTS `upload`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `upload` (
`id` int(11) NOT NULL auto_increment,
`file_name` varchar(255) NOT NULL,
`file_type` varchar(20) NOT NULL,
`file_path` varchar(255) NOT NULL,
`timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
`session_id` varchar(45) default NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=8965 DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;
これまでのところ、すべてが私のcmsでutf-8です:
<meta charset="utf-8">