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

San*_*nuj 0 mysql utf-8 hindi

我将所有数据库/表和列设置为UTF-8_general_ci整理集.

我面临的条件: -

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

现在的主要问题是: -

数据已经在线上通过表单进行了更改,现在我需要将这些数据导出到excel并提供给客户端,但我得到的जाà¤是excel而不是印地文字符.

注意 :-

  • 所有的英文字符都很好,因为它无处不在.
  • 我的CHARACTER SET utf8适用于所有表格.
  • 我试图将校对更改为UTF-8_bin,但这对我来说也没有帮助.
  • 浏览器上的编码是UTF-8,我已经发送了UTF-8编码的头文件.

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

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

请帮忙!!

Jon*_*oni 5

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

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

  1. 在同一个表中,当我通过HTML/PHP表单插入数据时,我看到一些无法识别的英语单词,如cc2faa;(类似这样的东西)和网页上的正确印地语.
  2. 对于大数据,我们有一个从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.这取决于您用于访问数据库的内容.