Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 转换为mysqli_query()后,utf8字符错误显示为问号_Php_Mysql_Utf 8_Character Encoding - Fatal编程技术网

Php 转换为mysqli_query()后,utf8字符错误显示为问号

Php 转换为mysqli_query()后,utf8字符错误显示为问号,php,mysql,utf-8,character-encoding,Php,Mysql,Utf 8,Character Encoding,我的数据库是latin1_swedish_ci,但所有包含外来字符(德语、土耳其语…)的表都是utf8_general_ci 在升级到PHP5.6之前,我使用 mysql_query("SET CHARACTER SET utf8;"); mysql_query("SET NAMES utf8"); 在mysql\u query()之前,所有内容都正确显示在我的页面中(在页面标题中) 在将所有的mysql\u查询(…)转换为mysqli\u查询(id…)并在PHP5.6下运行之后,所有的外语

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

在升级到PHP5.6之前,我使用

mysql_query("SET CHARACTER SET utf8;");
mysql_query("SET NAMES utf8"); 
mysql\u query()
之前,所有内容都正确显示在我的页面中(
在页面标题中)

在将所有的
mysql\u查询(…)
转换为
mysqli\u查询(id…)
并在PHP5.6下运行之后,所有的外语现在都被打乱了?及�. 切换回PHP5.4没有帮助。phpMyAdmin正确显示mysql数据库(未更改)

我四处寻找解决方案,但没有任何效果。。。我错过什么了吗


我需要在代码中更改什么才能正常工作?

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

编辑在Chrome浏览器中,您可以查看浏览器呈现页面时使用的编码。单击右上角的chrome菜单(三条小水平线)。单击更多工具>单击编码>然后您将看到字符集的选择。试着选择一个不同的

尝试将这一行放入HTML文档的
部分

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

这可能会强制浏览器使用正确的字符集

结束编辑

切换到mysqli后,在打开mysql会话时,是否保留了
设置字符集
设置名称
查询?如果没有,把它们放回去,看看是否有帮助

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

尝试执行此处建议的操作:

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

我的数据库是拉丁语和瑞典语


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

反复搜索后

这是解决办法

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

$con=mysqli_connect($host",$user,$password,$db);
mysqli_set_charset($con,"utf8");
在php 5.4之前,我在mysql_query()中使用的字符集和名称已经不够了

mysqli_query($con,"SET CHARACTER SET utf8;");
mysqli_query($con,"SET NAMES utf8");
在我的本地服务器上,在添加了包含以下行的my.cnf文件后,我还必须重新编译mysql:

[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
<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>
我还必须通过编辑MAMP/Library/share/charsets/index.xml并添加以下行,将utf8字符集添加到MAMP中:

[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
<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>

统一码
UTF8 Unicode
utf8
主要的,重要的
汇编
二元的
汇编
在我的web服务器上,上述两个步骤是不必要的。

我也有同样的问题。 不确定这是否有帮助,但作为一个noob,我无法理解或实现这个问题答案的复杂性

首先,我将其添加到我的html页面:
然后,我进入PHPMyAdmin,点击我在浏览器中看到菱形圆圈问号的专栏,然后简单地在数据库级别将编码重置为UTF-8

我希望这会有帮助。当然对我来说很容易


“转换”相当模糊。有几个步骤;请详细说明。另外,提供
从tbl中选择列、十六进制(列),其中用于某些非ascii字符串。这将有助于确定损坏的程度。我所说的转换是指:用新的mysqli更改旧的php-mysql函数的所有实例。这就是我所做的一切,因此我的网站将在PHP5.6下正确显示。在转换之前,所有外来字符都显示正确。数据库是拉丁语,但所有包含外来字符的表和字段都是utf8。在转换过程中,数据库、表或字段未发生任何更改。Ollie提供的链接上的建议解决方案。。。在php.ini文件中添加default_charset=“utf-8”行对我的本地服务器没有帮助。此外,这一变化不会影响其他只包含拉丁字符的网站吗?在我看来,数据库工作正常,因为它与旧的php mysql函数配合良好,并且因为phpmyadmin正确地显示了它。顺便说一句,在从数据库读取数据之前,我确认我仍在进行设置字符集和设置名称的mysqli查询。谢谢@paulgodard。查询这个
集合字符集utf8
集合名称utf8
对我很有用!如果这个答案对你有效,请选择它作为答案。这个答案应该被检查为最佳答案。