Pau*_*ard 5 php mysql utf-8 character-encoding
我的数据库是latin1_swedish_ci,但所有包含外来字符(德语,土耳其语......)的表都是utf8_general_ci.
在升级到php 5.6之前,我用过
mysql_query("SET CHARACTER SET utf8;");
mysql_query("SET NAMES utf8");
Run Code Online (Sandbox Code Playgroud)
之前mysql_query(),一切都在我的页面中正确显示(<meta http-equiv="content-type" content="text/html;charset=UTF-8" />在页眉中).
所有转换后mysql_query(...)到mysqli_query(id,...)下PHP 5.6运行,所有的外语,现在加扰?和 .切换回PHP 5.4没有帮助.phpMyAdmin正确显示mysql数据库(未更改).
我四处寻找解决方案,但没有任何作用......我错过了什么?
我需要更改代码才能正常工作?
经过一次又一次的搜索......
http://www.toptal.com/php/a-utf-8-primer-for-php-and-mysql
这是解决方案.
在我的PHP脚本中,我必须在连接到数据库后添加一个字符集查询.
$con=mysqli_connect($host",$user,$password,$db);
mysqli_set_charset($con,"utf8");
Run Code Online (Sandbox Code Playgroud)
以前使用mysql_query()到php 5.4的charset和名称已经不够了.
mysqli_query($con,"SET CHARACTER SET utf8;");
mysqli_query($con,"SET NAMES utf8");
Run Code Online (Sandbox Code Playgroud)
在我的本地服务器上,我还必须在添加包含以下行的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
Run Code Online (Sandbox Code Playgroud)
我还必须通过编辑MAMP/Library/share/charsets/index.xml并添加以下行来将utf8字符集添加到MAMP:
<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>
Run Code Online (Sandbox Code Playgroud)
在我的Web服务器上,没有必要执行上述两个步骤.
这些乱码是浏览器或其他用户可见的软件包将 utf-8 字符呈现为 ASCII 或 Latin-1 的结果。
编辑在 Chrome 浏览器中,您可以查看浏览器渲染页面所使用的编码。单击右上角的镶边菜单(三条小水平线)。单击更多工具> 单击编码> 然后您将看到字符集的选择。尝试选择一个不同的。
尝试将此行放入 HTML 文档的<HEAD>部分中。
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
Run Code Online (Sandbox Code Playgroud)
这可能会强制浏览器使用正确的字符集。
结束编辑
切换到 mysqli 后,您在打开 mysql 会话时是否保留了SET CHARACTER SET和查询?SET NAMES如果没有,请将它们放回原处,看看是否有帮助。
您的数据库可能工作正常,但 php 告诉浏览器您正在使用 Latin-1。事实上,这很可能是因为 phpmyadmin 工作正常。
尝试执行此处建议的操作: 将 PHP 默认编码设置为 utf-8?
关于字符集和排序规则存在很多概念上的混乱。当你说
我的数据库是 latin1_swedish_ci
您的意思是新定义的表的默认字符集是latin1,默认排序规则是不区分大小写的瑞典语。这些只是默认值。对于数据存储来说重要的是每列使用的字符集。你说那是utf8。排序规则 ( utf8_general_ci) 仅用于搜索和匹配。
| 归档时间: |
|
| 查看次数: |
1617 次 |
| 最近记录: |