PHP:PHP手册-Manual

yws3nbqq  于 11个月前  发布在  PHP
关注(0)|答案(9)|浏览(114)

最近我从一个提供商切换到另一个提供商,我在显示西里尔字符时遇到了问题。从数据库中读取的字符可以正确显示,但在php文件中硬编码的字符却不能(它们显示为问号)。
包含php源代码的文件是以utf-8格式保存的,有帮助吗?

szqfcxe2

szqfcxe21#

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

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

字符串

w8ntj3qf

w8ntj3qf2#

我的PHP模块是完全相同的问题,所有的文本都像“?”
我的代码是用Notepad编写的。我找到了解决问题的方法。问题不在头字符集或Meta标记中,因为浏览器实际上知道它是UTF-8字符集。我尝试了浏览器的所有编码,结果都是一样的,所以我知道问题出在别的地方,根本不在浏览器字符编码中。
我只是用Notepad
打开PHP模块并选择所有代码。之后在编码菜单中选择“转换为UTF-8”。上传到服务器后,一切都像一个魅力。

wwtsj6pe

wwtsj6pe3#

在连接数据库后放入以下内容:

mysql_query("SET NAMES UTF8");

字符串
关于mysqli

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


在页面的标题中:

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

pu82cl6c

pu82cl6c4#

这个问题似乎很奇怪。
这些问号的形式是什么?是带问号的黑钻石还是单纯的问号?
首先仔细检查你的文件是否真的是utf-8编码的。
尝试将此头添加到您的代码中(在所有输出之上)

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

字符串
但我怀疑这会有帮助,因为你的数据库文本已经看起来很好了。
你的代码中有SET NAMES查询吗?它设置了什么charset

0vvn1miw

0vvn1miw5#

这与php文件的编码有关。这些文件是使用Windows记事本创建的,并以utf-8编码保存。
当我使用Notepad 2打开文件时,文件的编码是“utf-8 with signature”。当我将编码更改为“utf-8”时,文本显示正确。

5jdjgkvh

5jdjgkvh6#

问题的原因通常是程序员的编辑器意外地对脚本文件进行了重新编码。在php文件中硬编码依赖于编码的字符串并不是一个好的做法。
尝试切换浏览器的编码,以查找硬编码文本使用的编码,这可能有助于解决问题。还请确保为每个页面发送正确的http标头:

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

字符串
您可以选择在HTML中插入Meta标签:

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

ruyhziif

ruyhziif7#

对我来说,这条线的区别是:

$mysqli->set_charset("utf8")

字符串
直接从PHP documentation page
服务器返回拉丁文,在设置字符集为utf8后,现在工作正常。

toiithl6

toiithl68#

这是正确的值,必须这样设置:
第一个月

bnl4lu3b

bnl4lu3b9#

我一直在与这个完全相同的问题作斗争,因为我试图在一个小部件上的一些控件中添加一点法语/德语国际化。
带有重音符号的字符存储在我的数据库中,可以打印为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);


这是一个完全的解决方案.

相关问题