繁体   English   中英

PHP:西里尔字母不能正确显示

[英]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" />

对我而言,造成变化的那一行如下:

$mysqli->set_charset("utf8")

直接来自PHP文档页面

将字符集设置为utf8后,服务器返回拉丁语,现在可以正常工作。

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

存储在我的数据库中的带有重音符号的字符可以打印为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文件中的重音符号/特殊字符。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM