0

我将所有数据库/表和列都设置为UTF-8_general_ci排序规则集。

我面临的条件:-

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

现在主要问题是:-

数据已通过表格在线更改,现在我需要将这些数据导出到 excel 并提供给客户,但我使用的是जाà¤excel 而不是印地语字符。

笔记 :-

  • 所有英文字符都可以正常工作,因为它无处不在。
  • 我的 CHARACTER SETutf8适用于所有表格。
  • 我试图将排序规则更改为 UTF-8_bin 但这也对我没有帮助。
  • 浏览器上的编码是 UTF-8,我已经发送了 UTF-8 编码的标头。

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

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

请帮忙!!

4

2 回答 2

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

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

  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。这取决于您使用什么来访问数据库。

于 2012-09-27T11:18:38.510 回答
1

如果您需要将数据导出为 Excel 文件,请使用php-export-dataEli Dickinson 的 PHP 类, http: //github.com/elidickinson/php-export-data。它非常漂亮,到目前为止我用它导出奇怪的字符集没有问题。

于 2012-09-27T07:57:12.857 回答