我正在使用PHP中的UTF-8编码,我一直在努力获取输出,就像我想要的那样。然后,没有任何代码发生,输出突然发生变化。
以前我得到了希伯来语输出。现在我得到了“&&&&&&”。
任何可能导致此问题的想法?
答案 0 :(得分:3)
这些是最常见的问题:
你可以尝试一些事情:
配置您的编辑器
确保您的文本编辑器,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(),它将返回输入中的字节数,而不是数字字符。您可以使用Multibyte String PHP扩展来解决这个问题,尽管这些字节/字符问题不常见会导致问题。
此处采取的形式为:http://webmonkeyuk.wordpress.com/2011/04/23/how-to-avoid-character-encoding-problems-in-php/
答案 1 :(得分:1)
尝试使用header
这样的
header('Content-Type: text/html; charset=utf-8');
答案 2 :(得分:1)
尝试此功能 - &gt;
$html = "Bla Bla Bla...";
$html = mb_convert_encoding($html, 'HTML-ENTITIES', "UTF-8");
了解更多信息 - http://php.net/manual/en/function.mb-convert-encoding.php
答案 3 :(得分:-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');
}
感谢您的帮助! :)