2

我正在使用 PHP 中的 UTF-8 编码,我一直在设法获得我想要的输出。然后代码没有发生任何事情,输出突然发生了变化。

以前我得到的是希伯来语输出。现在我得到“&&&&&”。

有什么想法可能导致这种情况吗?

4

4 回答 4

3

这些是最常见的问题:

  • 您在其中创建 PHP/HTML 文件的编辑器
  • 您浏览网站时使用的网络浏览器
  • 在 Web 服务器上运行的 PHP Web 应用程序
  • MySQL数据库
  • 您正在从其他任何地方读取/写入数据(memcached、API、RSS 提要等)

您可以尝试几件事:

配置你的编辑器

确保您的文本编辑器、IDE 或您编写 PHP 代码的任何工具以 UTF-8 格式保存文件。您的 FTP 客户端、scp、SFTP 客户端不需要任何特殊的 UTF-8 设置。

确保网络浏览器知道使用 UTF-8

为了确保您的用户的浏览器都知道以 UTF-8 格式读取/写入所有数据,您可以在两个位置进行设置。

内容类型标签

确保内容类型 META 标头指定 UTF-8 作为字符集,如下所示:

<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">

HTTP 响应标头

确保 Content-Type 响应标头也将 UTF-8 指定为字符集,如下所示:

ini_set('default_charset', 'utf-8')

配置 MySQL 连接

现在您知道您从用户那里收到的所有数据都是 UTF-8 格式,我们需要配置 PHP 和 MySQL 数据库之间的客户端连接。通过简单地执行 MySQL 查询,有一种通用的方法:

SET NAMES utf8;

…并且根据您使用的客户端/驱动程序,有一些辅助函数可以更轻松地执行此操作:

使用内置的 mysql 函数

mysql_set_charset('utf8', $link);

使用 MySQLi

$mysqli->set_charset("utf8")

*使用 PDO_MySQL(连接时)*

$pdo = new PDO( 
    'mysql:host=hostname;dbname=defaultDbName', 
    'username', 
    'password', 
    array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8") 
);

MySQL 数据库

我们现在差不多了,您只需要确保 MySQL 知道将表中的数据存储为 UTF-8。您可以通过查看 SHOW TABLE STATUS 输出中的 Collat​​ion 值来检查它们的编码(在 phpmyadmin 中,这显示在表列表中)。如果您的表尚未采用 UTF-8 格式(很可能是 latin1 格式),那么您需要通过为每个表运行以下命令来转换它们:

ALTER TABLE myTable CHARACTER SET utf8 COLLATE utf8_general_ci;

最后一件事要注意

现在所有这些步骤都完成了,您的应用程序应该没有任何字符集问题。需要注意一件事,大多数 PHP 字符串函数不支持 unicode,例如,如果您对多字节字符运行 strlen(),它将返回输入中的字节数,而不是字节数人物。您可以通过使用多字节字符串 PHP 扩展来解决此问题,尽管这些字节/字符问题引起问题的情况并不常见。

在这里采取的形式:http ://webmonkeyuk.wordpress.com/2011/04/23/how-to-avoid-character-encoding-problems-in-php/

于 2013-05-27T05:44:41.133 回答
1

header像这样设置内容类型后尝试

header('Content-Type: text/html; charset=utf-8');
于 2013-05-27T05:38:27.627 回答
1

试试这个功能->

$html = "Bla Bla Bla...";
$html = mb_convert_encoding($html, 'HTML-ENTITIES', "UTF-8");

更多信息 - http://php.net/manual/en/function.mb-convert-encoding.php

于 2013-05-27T05:55:47.657 回答
-1

我把这个方法放在一起并在我正在使用的文件中调用它,这似乎解决了这个问题。

function setutf_8()
    {
    header('content-type: text/html; charset: utf-8');
    mb_internal_encoding('UTF-8');
    mb_http_output('UTF-8');
    mb_http_input('UTF-8');
    mb_language('uni');
    mb_regex_encoding('UTF-8');
    ob_start('mb_output_handler');
    }

谢谢你的帮助!:)

于 2013-05-27T06:27:03.343 回答