我将所有数据库/表和列设置为UTF-8_general_ci
归类集。
我面临的条件: -
cc2faa;
(类似于此)和网页上的正确印地语。जाना
之类的字符,但在网页上看到Hindi
。现在的主要问题是: -
数据已经在线下通过表单进行更改,现在我需要将这些数据导出到excel并提供给客户端,但我在excel中获取जाà¤
而不是印地语字符。
注意: -
utf8
适用于所有表格。 我看过很多关于utf8问题的帖子,但似乎没有人有这种奇怪的不同行为问题。
请问我有什么救援吗?或者最后必须给出数据的PHP报告
请帮助!!
答案 0 :(得分:5)
- 当我通过phpmyadmin手动插入hindi数据时,我可以在phpmyadmin中看到hindi字符,而在PHP生成的网页上看到问号
醇>
PHP可能会生成问号,因为数据库连接的编码不是utf-8。如何解决这个问题取决于您使用的数据库库;如果你使用MySQLi使用mysqli_set_charset('utf8')
,如果PDO你将charset=utf8
添加到DSN ......
- 在同一个表格中,当我通过HTML / PHP表单插入数据时,我看到一些无法识别的英文单词,如cc2faa;(类似这样)和网页上的正确印地语。
- 对于大数据,我们有一个从txt文件中读取并在此表中插入数据的脚本,我在phpmyadmin中看到像जाना这样的字符,但在网页上显示印地语。
醇>
这些可能是由上述相同的问题引起的:PHP表单和脚本使用默认编码连接到数据库,可能是latin1。然后他们插入utf-8编码文本,但由于MySQL认为你正在使用latin1,它再次将文本编码为utf-8,并将这个双重编码的文本插入表中。
所以:PHP向MySQL发送“जाना”告诉它是latin1,然后MySQL将其转换为utf-8,从而产生“जाना”。后来PHP要求MySQL返回值,并且由于连接再次使用latin1,MySQL将“जाना”解码为latin1。然后PHP假装这个latin1字符串实际上是utf-8并显示“जाना”。
同样,解决方案是将连接的编码设置为utf-8。这取决于您使用什么来访问数据库。
答案 1 :(得分:1)
如果您需要将数据导出为Excel文件,请使用Eli Dickinson的php-export-data
版{{1}},http://github.com/elidickinson/php-export-data。它非常漂亮,到目前为止我没有问题导出奇怪的字符集。