我正在使用 PHP 中的 UTF-8 编码,我一直在设法获得我想要的输出。然后代码没有发生任何事情,输出突然发生了变化。
以前我得到的是希伯来语输出。现在我得到“&&&&&”。
有什么想法可能导致这种情况吗?
这些是最常见的问题:
您可以尝试几件事:
配置你的编辑器
确保您的文本编辑器、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 输出中的 Collation 值来检查它们的编码(在 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/
header
像这样设置内容类型后尝试
header('Content-Type: text/html; charset=utf-8');
试试这个功能->
$html = "Bla Bla Bla...";
$html = mb_convert_encoding($html, 'HTML-ENTITIES', "UTF-8");
更多信息 - http://php.net/manual/en/function.mb-convert-encoding.php
我把这个方法放在一起并在我正在使用的文件中调用它,这似乎解决了这个问题。
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');
}
谢谢你的帮助!:)