这是我的本地场景:
我有一个应用程序,它读取一些 CSV 文件并将内容写入我的本地 MYSQL 数据库。内容包含变音符号,例如“ß”或“Ä”。本地一切正常,变音符号被写入数据库,并在读取数据库的应用程序内显示正确。
现在我把这个场景移到亚马逊云上,突然“ß”变成了“?” 在数据库中。我检查了程序从 CSV 文件中读取的内容,它仍然是一个“ß”。所以我猜它一定是写入数据库,问题是,为什么这在本地工作而不是在我的云服务器上?这是数据库问题还是 PHP 问题?
谢谢!:)
这是我的本地场景:
我有一个应用程序,它读取一些 CSV 文件并将内容写入我的本地 MYSQL 数据库。内容包含变音符号,例如“ß”或“Ä”。本地一切正常,变音符号被写入数据库,并在读取数据库的应用程序内显示正确。
现在我把这个场景移到亚马逊云上,突然“ß”变成了“?” 在数据库中。我检查了程序从 CSV 文件中读取的内容,它仍然是一个“ß”。所以我猜它一定是写入数据库,问题是,为什么这在本地工作而不是在我的云服务器上?这是数据库问题还是 PHP 问题?
谢谢!:)
您是否检查了两个数据库上的编码?很可能有问题。
您需要对数据库进行 UTF-8 编码。
这是一篇出色的概述文章,解释了编码在 MySQL 中的工作原理,以及修复它的多种方法:
您可以使用:
iconv("UTF-8", "ISO-8859-1", $stringhere);
这将为您转换字符串
这完全取决于您如何上传 CSV 文件。
在将数据写入 MySQL 服务器之前,此代码可能会有所帮助:
$Notes = $_POST['Notes']; // or contents of the CSV file- but split the data first according to newline etc.
$charset = mysqli_character_set_name($DBConnect);
printf ("To check your character set but not necessary %s\n",$charset);
$Notes = str_replace('"', '"', $Notes); //double quotes for mailto: emails.
$von = array("ä","ö","ü","ß","Ä","Ö","Ü"," ","é"); //to correct double whitepaces as well
$zu = array("ä","ö","ü","ß","Ä","Ö","Ü"," ","é");
$Notes = str_replace($von, $zu, $Notes);
echo " Notes:".$Notes."<br>" ;
$Notes = mysqli_real_escape_string($link, $Notes); //for mysqli DB connection.
echo " Notes:".$Notes ;