首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >utf8字符在转换为mysqli_query()后错误地显示为问号

问utf8字符在转换为mysqli_query()后错误地显示为问号
EN

Stack Overflow用户
提问于 2015-08-04 10:58:21
回答 3查看 3K关注 0票数 6

我的数据库是latin1_swedish_ci,但是所有包含外文字符的表(德语、土耳其语.)是utf8_general_ci。

在升级到php 5.6之前,我使用了

代码语言:javascript
复制
mysql_query("SET CHARACTER SET utf8;");
mysql_query("SET NAMES utf8"); 

在mysql_query()之前,所有内容都正确地显示在我的页面中(<meta http-equiv="content-type" content="text/html;charset=UTF-8" />在页面标题中)。

在将所有的mysql_query(...)转换为mysqli_query(id,...)并在PHP5.6下运行之后,现在所有的外语都被乱码了?和�。切换回php5.4无助于此。phpMyAdmin正确地显示mysql数据库(没有更改)。

我已经四处寻找解决办法了,但什么都没有.我是不是遗漏了什么?

要正确工作,我需要在代码中更改什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-08-04 11:30:15

这些乱七八糟的字符是浏览器或其他用户可见软件包的结果,将utf-8字符呈现为ASCII或拉丁文-1。

在Chrome浏览器中编辑,您可以查看浏览器呈现页面的编码。单击右上角的铬菜单(三条小水平线)。单击“更多”Tools>,单击“Encoding>”,然后将看到字符集的选择。试着选择另一个。

尝试将这一行放入HTML文档的<HEAD>部分。

代码语言:javascript
复制
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

这可能会迫使浏览器使用正确的字符集。

端编辑

切换到mysqli之后,在打开mysql会话时是否保留了SET CHARACTER SET和SET NAMES查询?如果没有,把它们放回去,看看是否有用。

您的数据库可能工作正常,但是php告诉浏览器您使用的是拉丁语-1。事实上,这很可能是因为phpmyadmin运行正常。

试着做这里建议的事情:Setting PHP default encoding to utf-8?

关于字符集和排序规则,有很多概念上的混淆。当你说

我的数据库是latin1_swedish_ci

您的意思是新定义的表的默认字符集是latin1,默认排序规则是不区分大小写的瑞典语。这些只是默认设置。对于数据存储来说,重要的是为每一列使用的字符集。你说那是utf8。排序规则(utf8_general_ci)仅用于搜索和匹配。

票数 1
EN

Stack Overflow用户

发布于 2015-08-06 00:29:18

经过一次又一次的搜寻..。

MAMP MySQL not recognizing my.cnf values in OSX

Does MySQL included with MAMP not include a config file?

http://www.toptal.com/php/a-utf-8-primer-for-php-and-mysql

这是解决办法。

在我的php脚本中,我必须在连接到数据库后添加一个字符集查询。

代码语言:javascript
复制
$con=mysqli_connect($host",$user,$password,$db);
mysqli_set_charset($con,"utf8");

前面的字符集&我和mysql_query()一起使用的名称,一直到php5.4都是不够的。

代码语言:javascript
复制
mysqli_query($con,"SET CHARACTER SET utf8;");
mysqli_query($con,"SET NAMES utf8");

在本地服务器上,在添加包含以下行的my.cnf文件后,还必须重新编译mysql:

代码语言:javascript
复制
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
default-storage-engine = InnoDB
character-set-client-handshake
collation-server=utf8_general_ci
character-set-server=utf8
[mysqld_safe]
default-character-set=utf8

我还必须编辑MAMP /Library/share/ charset /index.xml并添加折叠行,从而将utf8字符集添加到MAMP中:

代码语言:javascript
复制
<charset name="utf8">
  <family>Unicode</family>
  <description>UTF8 Unicode</description>
  <alias>utf8</alias>
  <collation name="utf8_general_ci" id="33">
   <flag>primary</flag>
   <flag>compiled</flag>
  </collation>
  <collation name="utf8_bin"        id="83">
    <flag>binary</flag>
    <flag>compiled</flag>
  </collation>
</charset>

在我的web服务器上,上面的两个步骤是不必要的。

票数 8
EN

Stack Overflow用户

发布于 2020-12-24 15:09:56

我也有同样的问题。不确定这是否有帮助,但作为一个新手,我没有办法跟踪或实现这个问题的复杂答案。

首先,我将它添加到我的html页面:<meta charset="utf-8"/>.,然后,我进入PHPMyAdmin,点击在浏览器中看到钻石圈的问题标记的列,然后简单地在数据库级别将编码重置为UTF-8。

希望能帮上忙。对我来说当然很容易。

​

​

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31807479

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档