我正在编写一个网页,用户可以上传自己的画廊。执行此操作时,系统会为与图库同名的图像创建子文件夹,对图库的引用将作为一行添加到表格中,并且还会为图库创建一个单独的表格,其中包含图像列表。 / p>
当我尝试创建一个新画廊时,只要没有西欧标志,一切正常。如果我将图库命名为“beär”,我将收到错误,“表'databasename.beär...'不存在。
然而,该表确实存在正确的名称, 我已经尝试在返回错误的mysql查询之前打印出变量$ sub(表示查询中的库名称),它打印正确。
还尝试了mysql_query(“SET NAMES'latin1'”,$ connection)))和UTF-8相同 latin1什么都不做,UTF-8把所有东西都搞砸了(画廊名称实际上就是beär)。
文本文件采用ISO 8859-1编码,字符集定义也是ISO 8859-1
这是查询:
if(!($result = @ mysql_query("SELECT * FROM {$database}.`{$sub}`
ORDER BY item_id DESC", $connection)))
{showerror();}
非常感谢任何帮助
答案 0 :(得分:5)
表'databasename.beär...
您正在按照图库的名称创建数据库表。 在任何编码中都不能很好地处理特殊字符!
更正:根据docs,确实可以使用当前字符集中的任何字母数字字符!在这种情况下,您需要更改输入。查看错误消息,ä
中的Beär
将作为UTF-8字符提供。你需要解决这个问题。这是在Ajax请求中发生的吗?默认情况下,这些编码为UTF-8。
在任何情况下,我都会在表名中使用特殊字符感到不安。我不会这样做。
此外,创建每用户表通常是基本设计错误的症状。为什么不将所有记录保存在一个表中,通过列标识用户?