[英]PHP: Cyrillic characters not displayed correctly
最近,我将托管服务从一个提供商切换到了另一个提供商,但在显示西里尔字母时遇到了问题。 从数据库读取的字符正确显示,但是在php文件中硬编码的字符却没有显示(它们显示为问号)。
包含php源代码的文件以utf-8格式保存。 帮助任何人?
尝试在标头部分放置一个表示编码的meta标签:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
我的PHP模块完全有同样的问题,所有文本都像“ ?????????????????”
我的代码是用Notepad ++编写的。 我找到了解决问题的方法。 问题不在标题字符集或元标记中,因为浏览器实际上知道它是UTF-8字符集。 我从浏览器尝试了所有编码,结果都是一样的,所以我知道问题出在别的地方,根本不是浏览器的字符编码。
我刚刚用Notepad ++打开了PHP模块并选择了所有代码。 之后,在“编码”菜单中,我选择了“转换为UTF-8”。 上传到服务器后,所有内容都像一个超级按钮。
这个问题似乎很奇怪。
这些问号的形式是什么? 是带有疑问的黑钻石还是仅仅是问号?
首先,请仔细检查您的文件是否真的是utf-8
编码。
尝试将此标头添加到您的代码中(在所有输出上方)
header('Content-Type: text/html; charset=utf-8');
但是我怀疑这会有所帮助,因为您的数据库文本已经看起来不错。
您的代码中是否有任何SET NAMES
查询? 它设置了什么charset
集?
在连接数据库后放这个:
mysql_query("SET NAMES UTF8");
对于mysqli
mysqli_query($connecDB,"SET NAMES UTF8");
并在页面标题中:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
它与php文件的编码有关。 这些文件是使用Windows记事本创建的,并以utf-8编码保存。
当我使用Notepad2打开文件时,文件的编码为“带签名的utf-8”。 当我将编码更改为“ utf-8”时,文本正确显示。
出现问题的原因通常是程序员的编辑器意外地重新编码了脚本文件。 硬编码依赖于php文件中编码的字符串不是一个好习惯。
尝试切换浏览器的编码,以找到用于硬编码文本的编码,这可能有助于您解决此问题。 还要确保为每个页面发送正确的http标头:
header('Content-Type: text/html; charset=utf-8');
可选地,您可以在HTML中插入meta标签:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
我一直在与这个完全相同的问题作斗争,因为我试图在小部件上的一些控件中添加一些法语/德语国际化。
存储在我的数据库中的带有重音符号的字符可以打印为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文件中的重音符号/特殊字符。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.