UTF 8 编码在 PHP 中无法正常工作

Posted

技术标签:

【中文标题】UTF 8 编码在 PHP 中无法正常工作【英文标题】:UTF 8 encoding not working properly in PHP 【发布时间】:2015-04-28 14:00:15 【问题描述】:

我正在尝试从 mysql 数据库打印数据。

我有一个简单的问题,它显示的是 D�lar 而不是 Dólar

虽然我已经包含了

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

在我的html页面中,任何人都可以帮助我解决这个问题

提前致谢

【问题讨论】:

问题可能是您的数据库有另一个用于 taht 数据库/表的字符集 UTF 8 编码在 your php script 中无法正常工作...因为 UTF-8 在 PHP 中完美运行,如果您正确使用它的话。 如果是 ajax 响应,您必须在 content-type 中设置 var jax = createAjax(); jax.open("POST",path,true) jax.setRequestHeader('Content-type','text/html; charset=utf-8'); 【参考方案1】:

字符集需要在几个不同的地方定义:

MySQL 数据库

存储在数据库中的文本可能未编码为 UTF-8。您可以将默认字符集定义为create database 语句的一部分:

CREATE DATABASE mydb CHARACTER SET utf8;

您还可以使用create table 指定每列字符集。

在您的 PHP 代码中

您需要告诉客户端代码在与数据库通信时应该使用哪种编码。

如果你使用PDO,你可以指定字符集as part of the DSN string:

$dsn = 'mysql:host=localhost;dbname=testdb;charset=utf8';
$dbh = new PDO($dsn, $username, $password);

如果您使用的是 MySQLi,则可以使用 mysqli_set_charset() 函数/方法:

$dbh->set_charset('utf8');

或:

mysqli_set_charset($dbh, 'utf8');

或者,MySQL网站在连接到服务器后建议issuing a statement:

SET NAMES 'utf8';

在 HTML 输出中

对于 HTML5,您只需在输出的 &lt;head&gt; 元素中添加以下 &lt;meta&gt; 标记:

<meta charset="utf-8">

【讨论】:

所以用发出语句的语句就像我将执行 SET NAMES 'utf8' ; ?? 是的,只要在连接到数据库后将 SET NAMES 'utf8'; 作为 SQL 语句运行,就像运行 SELECT * FROM x 或类似方法一样。不过,我个人建议使用其他方法之一。 编辑: This answer 可能有用。 谢谢兄弟,是的,我试过了,但它不起作用,不幸的是,我会使用其他方法。【参考方案2】:

我已经使用了波纹管功能,它对我有用

call_user_func_array('mb_convert_encoding', array(&$str,'HTML-ENTITIES','UTF-8'));

【讨论】:

以上是关于UTF 8 编码在 PHP 中无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

mysql 字符集 utf 8 排序规则(dup 键)无法正常工作

jquery自动完成功能无法正常工作

PHP/AJAX:无法在 ajax 响应中显示外来字符

用Python 抓取的UTF8网页无法decode('utf-8')

PHP编码问题

C# UTF-8 base64 编码在 PHP 中无法正确解码