PHP:西里尔字符未正确显示

时间:2010-03-30 07:22:50

标签: php unicode utf-8 character

最近我将主机从一个提供商切换到另一个提供商,我在显示西里尔字符时遇到问题。从数据库中读取的字符显示正确,但在php文件中硬编码的字符不是(它们显示为问号)。

包含php源代码的文件以utf-8格式保存。帮助任何人?

8 个答案:

答案 0 :(得分:5)

尝试在head部分放置一个指示编码的元标记:

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

答案 1 :(得分:3)

我的PHP模块完全出现同样的问题所有文字都像&#34; ?????????????????&#34;

我的代码是用Notepad ++编写的。我找到了问题的解决方案。问题不在标题字符集或元标记中,因为浏览器实际上知道它是UTF-8字符集。我尝试了浏览器中的所有编码,结果是一样的,所以我知道问题出在其他地方,而不是浏览器字符编码。

我刚用Notepad ++打开PHP模块并选择了所有代码。之后在编码菜单中,我选择了&#34;转换为UTF-8。&#34;上传到服务器后,一切都像魅力一样。

答案 2 :(得分:2)

问题似乎很奇怪 这些问号的形式是什么?是问题的黑色钻石还是简单的问号? 首先仔细检查您的文件是否真的utf-8编码 尝试将此标题添加到您的代码中(首先是输出)

header('Content-Type: text/html; charset=utf-8'); 

但是我怀疑它会有所帮助,因为你的数据库文本看起来很好 您的代码中是否有SET NAMES个查询? charset它的设置是什么?

答案 3 :(得分:2)

在连接数据库后输入:

mysql_query("SET NAMES UTF8");

for mysqli

mysqli_query($connecDB,"SET NAMES UTF8");

并在页面标题中:

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

答案 4 :(得分:1)

它与php文件的编码有关。这些文件是使用Windows记事本创建的,并使用utf-8编码保存。

当我使用Notepad2打开文件时,文件的编码是“utf-8 with signature”。当我将编码更改为“utf-8”时,文本显示正确。

答案 5 :(得分:0)

问题的原因通常是程序员编辑器对脚本文件进行意外重新编码。在php文件中对依赖编码的字符串进行硬编码并不是一个好习惯。

尝试切换浏览器的编码以查找用于硬编码文本的编码,它可能有助于您解决问题。另外,请确保为每个页面发送正确的http标头:

header('Content-Type: text/html; charset=utf-8');

Optionaly您可以在HTML中插入元标记:

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

答案 6 :(得分:0)

对我来说,与众不同的那一行如下:

$mysqli->set_charset("utf8")

直接从PHP documentation page开始。

在将字符集设置为utf8之后,服务器正在返回拉丁语。

答案 7 :(得分:-1)

我一直在与这个完全相同的问题进行斗争,因为我正在尝试将一些法语/德语国际化添加到小部件上的一些控件上。

存储在我的数据库中的带有重音的字符打印为UTF-8。但是,在PHP文件中硬编码到数组中的字符显示为带有问号的黑色菱形或小方框。

我已经尝试过编码/解码我的php文件中的硬编码字符串,但无法正确显示字符。

由于我有一组有限的字符并且严格使用HTML,我只是在我的intl类中添加了一些功能来替换html实体的字符。

我有这些属性。

static $accentEntities = array('á' => '&aacute;', 
                               'É' => '&Eacute;',
                               'é' => '&eacute;', 
                               'í' => '&iacute;', 
                               'û' => '&ucirc;', 
                               'ü' => '&uuml;');
static $accents = array();
static $entities = array();

我在构造函数中设置了一些替换数组......

foreach (self::$accentEntities as $char => $entity) {
  self::$accents[] = $char;
  self::$entities[] = $entity;
}

然后当我在课堂上需要我的一个硬编码字符串时,我就这样返回...

return str_replace(self::$accents,self::$entities,$str);

这是一个完全贫民窟的解决方案......但就目前而言,它有效。我非常想听到正确的方法来显示硬编码到PHP文件中的重音符号/特殊字符。