最近我将一个提供程序的主机切换到另一个提供程序,并且显示西里尔文字符时出现问题。从数据库中读取的字符显示正确,但在PHP文件中硬编码的字符不是(它们显示为问号)。PHP:西里尔文字符显示不正确
包含php源代码的文件保存为utf-8格式。帮助任何人?
最近我将一个提供程序的主机切换到另一个提供程序,并且显示西里尔文字符时出现问题。从数据库中读取的字符显示正确,但在PHP文件中硬编码的字符不是(它们显示为问号)。PHP:西里尔文字符显示不正确
包含php源代码的文件保存为utf-8格式。帮助任何人?
它与php文件的编码有关。这些文件是使用Windows记事本创建的,并以utf-8编码保存。
当我使用Notepad2打开文件时,文件的编码是“带签名的utf-8”。当我将编码更改为“utf-8”时,文本显示正确。
试着将元标记指示在头部分的编码:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
原因您的问题往往是偶然的重新编码由程序员的编辑器的脚本文件。硬编码依赖于PHP文件中的编码的字符串不是一个好习惯。
尝试切换浏览器的编码以查找硬编码文本使用的编码,它可能会帮助您解决问题。另外,还要确保发送正确的HTTP标头的每一页:
header('Content-Type: text/html; charset=utf-8');
Optionaly你可以在你的HTML插入meta标签:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
这个问题似乎很奇怪。
这些问号的形式是什么?黑色钻石有问题还是只是普通的问号?
首先仔细检查你的文件是否真的编码为utf-8
。
尝试这个头添加到您的代码(所有输出上面)
header('Content-Type: text/html; charset=utf-8');
但我怀疑这会有所帮助,因为你的数据库中的文本已经看起来不错。
你的代码中有任何SET NAMES
查询吗?它设置了什么charset
?
加了它,不起作用。是的,我有设置名称查询它是SET NAMES'utf8'。 – Bogi 2010-03-30 11:12:10
@ user295502,所以你的页面不在UTF-8中,然后 – 2010-03-30 11:24:15
我一直在为这个完全相同的问题而战,因为我试图在小部件上添加一些法国/德国国际化功能。
带有存储在我的数据库中的口音的字符可以按照UTF-8打印。但是,在PHP文件中硬编码为数组的字符要么显示为内部带有问号的黑色菱形,要么显示为方形小方框。
我试过编码/解码硬编码的字符串从我的PHP文件中每一种方式,但无法让字符正确显示。
由于我有这样一组有限的字符,并且严格使用HTML,我只是在我的intl类中添加了一些功能来替换html实体的字符。
我有这些属性。
static $accentEntities = array('á' => 'á',
'É' => 'É',
'é' => 'é',
'í' => 'í',
'û' => 'û',
'ü' => 'ü');
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文件中的重音/特殊字符。
我的PHP模块正是有同样的问题,所有的文字就像“?????????????????”
而且我的代码用记事本++编写。我找到了解决问题的办法。这个问题是不是在标题字符集和meta标签,因为浏览器实际上知道它是UTF-8字符集。我尝试了所有编码从浏览器,结果是一样的,所以我知道这个问题是别的地方,而不是在浏览器中的字符编码的。
我刚打开PHP模块用记事本++和选择的所有代码。之后,在编码菜单中,我选择了“转换为UTF-8”。上传到服务器后,一切都像魅力一样。
好的。为我工作 – 2017-01-24 18:30:31
把这个连接数据库之后:
mysql_query("SET NAMES UTF8");
为mysqli的
mysqli_query($connecDB,"SET NAMES UTF8");
,并在页面的标题:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
精彩!!这帮了我很多,谢谢! – Lukas 2017-05-02 14:16:55
都尝试,不能正常工作。一切工作完美的以前托管,所以我认为这个问题是与新的提供者的PHP设置的东西。 – Bogi 2010-03-30 11:13:26