HTML / PHP表单和MySQL(印地语)之间的UTF-8奇怪行为

时间:2012-09-27 07:50:37

标签: mysql utf-8 hindi

我将所有数据库/表和列设置为UTF-8_general_ci归类集。

我面临的条件: -

  1. 当我通过phpmyadmin手动插入hindi数据时,我可以在phpmyadmin中看到hindi字符,而在PHP生成的网页上看到问号
  2. 在同一个表格中,当我通过HTML / PHP表格插入数据时,我看到一些无法识别的英语单词,如cc2faa;(类似于此)和网页上的正确印地语。
  3. 对于大数据,我们有一个从txt文件中读取并在表格中插入数据的脚本,我在phpmyadmin中看到जाना之类的字符,但在网页上看到Hindi
  4. 现在的主要问题是: -

    数据已经在线下通过表单进行更改,现在我需要将这些数据导出到excel并提供给客户端,但我在excel中获取जाà¤而不是印地语字符。

    注意: -

    • 所有英文字符都运行正常,无处不在。
    • 我的CHARACTER SET为utf8适用于所有表格。
    • 我尝试将排序规则更改为UTF-8_bin,但这对我来说也没有帮助。
    • 浏览器上的编码是UTF-8,我已经发送了UTF-8编码的标题。

    我看过很多关于utf8问题的帖子,但似乎没有人有这种奇怪的不同行为问题。

    请问我有什么救援吗?或者最后必须给出数据的PHP报告

    请帮助!!

2 个答案:

答案 0 :(得分:5)

  
      
  1. 当我通过phpmyadmin手动插入hindi数据时,我可以在phpmyadmin中看到hindi字符,而在PHP生成的网页上看到问号
  2.   

PHP可能会生成问号,因为数据库连接的编码不是utf-8。如何解决这个问题取决于您使用的数据库库;如果你使用MySQLi使用mysqli_set_charset('utf8'),如果PDO你将charset=utf8添加到DSN ......

  
      
  1. 在同一个表格中,当我通过HTML / PHP表单插入数据时,我看到一些无法识别的英文单词,如cc2faa;(类似这样)和网页上的正确印地语。
  2.   
  3. 对于大数据,我们有一个从txt文件中读取并在此表中插入数据的脚本,我在phpmyadmin中看到像जाना这样的字符,但在网页上显示印地语。
  4.   

这些可能是由上述相同的问题引起的: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。它非常漂亮,到目前为止我没有问题导出奇怪的字符集。