对SQL返回外来字符的Php查询,只是部分正确,为什么?

时间:2014-12-02 19:36:15

标签: php mysqli character-encoding

问题

我的本​​地计算机上有数据存储在包含来自世界各地的字母(阿拉伯语,中文,俄语,基本拉丁语等)的文件中。然后我使用Java将所有这些文件上传到mySQL数据中表

现在我的网站使用javascript来获取用户的搜索参数并将其发送到php。 Php然后查询SQL表并获得响应。然后将该响应发送回JS以显示在网页上。

我的问题是目前我的返回结果的外来字符。我正确地看到了一些信息,但随后一些外国字符被'?'取代。这是一个例子:

This is what I want to see * د افغانستان بانک ۲ دوی افغانی ۱۳۸۳

This is what is being displayed on the webpage * د افغا�?ستا�? با�?ک ۲ د�?�? افغا�?�? ۱۳۸۳

您可以看到某些字符是正确的,而其他字符已被问号替换。

我知道数据已正确存储在SQL表中,因为我可以使用Java成功下载该数据。我也知道问题不在于网络端的Javascript,因为我在我的php代码中添加了一行来附加包含正确字符的假的附加查询结果。

$response[] = ' Afghanistan د افغانستان بانک ۲ دوی افغانی ۱۳۸۳';

这是唯一的"结果"在网页上正确显示。

以下是我尝试做的工作。因为我已经知道数据必须从php获取SQL查询结果中被破坏,所以我专注于尝试修复它。

//mysqli_set_charset($connection, "latin1"); //utf8 || latin1 ||big5 ||cp850 || latin2

评论是我尝试过的所有编码版本。唯一成功的编码是latin1(默认)。它返回带有问号的结果。所有其他人都回归绝对的胡言乱语,如:

//د اÙغاÙستا٠باÙÚ© Û² دÙÛ Ø§ÙغاÙÛ Û±Û³Û¸Û³
//which should be: د افغانستان بانک ۲ دوی افغانی ۱۳۸۳

从同一个php脚本我也使用php SQL" INSERT INTO"上传外国字符。声明。当我使用Java访问表时,我能够成功地删除这些完整的字符。

问题

如何获取此PHP代码以返回正确的结果?

我很丢失,如果你们对此有任何了解,我会非常感激。非常感谢你!

1 个答案:

答案 0 :(得分:0)

在php和MySQL中都使用utf-8。您可以使用...

转换php字符串编码
 $str = mb_convert_encoding($response, "UTF-8");

在mysql中要么将整个表字符集作为" utf-general - *"或只是专栏。在建立连接之后,使用以下SQL

设置传输编码
 SET NAMES utf8

在各地保持一致非常重要。

相关问题