我正在将图像上传到我的 php 服务器上的一个小 cms 中,现在我有一个名为“1372609671-Terrassenböden Watrawood.jpg”的文件,这会导致一些严重的问题。我已将所有内容下载到我的 Mac 并调试了所有内容……面对这一点:
在我的 mysql 表中,一切似乎都很好,“ö”显示为“ö”,当我使用确切的文件名编写搜索查询时,我可以找到该文件:
但是我的 php 代码失败了,做同样的查询。当我通过文件系统获取文件名时readdir
,结果查询似乎很奇怪:
如您所见,“ö”不再是真正的“ö”了。它稍大一些,但没有大的“Ö”那么大。即使光标很有趣,我也可以停在字符中间,当我点击然后Backspace删除字符时,它首先删除它上面的点,然后第二次删除剩余的“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">