PHP: кириллические символы не отображаются правильно - PullRequest
1 голос
/ 30 марта 2010

Недавно я переключил хостинг с одного провайдера на другого, и у меня возникают проблемы с отображением символов кириллицы. Символы, которые считываются из базы данных, отображаются правильно, а символы, жестко закодированные в файле php, - нет (они отображаются в виде вопросительных знаков).

Файлы, содержащие исходный код php, сохраняются в форме utf-8. Кто-нибудь поможет?

Ответы [ 8 ]

5 голосов
/ 30 марта 2010

Попробуйте разместить метатег, указывающий кодировку в разделе заголовка:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
3 голосов
/ 07 июня 2015

Мой PHP-модуль был точно с той же проблемой, весь текст был похож на "?????????????????"

И мой код был написан с помощью Notepad ++. Я нашел решение проблемы. Проблема была не в кодировке заголовка или метатеге, потому что браузер фактически знает, что это кодировка UTF-8. Я попробовал все кодировки из браузера, и результат был таким же, поэтому я знал, что проблема в другом месте, а не в кодировке символов браузера.

Я просто открыл модуль PHP с помощью Notepad ++ и выделил весь код. После этого в меню «Кодирование» я выбрал «Преобразовать в UTF-8». После загрузки на сервер все заработало как шарм.

2 голосов
/ 06 сентября 2015

поставить это после подключения базы данных:

mysql_query("SET NAMES UTF8");

для mysqli

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

и в заголовке страницы:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
2 голосов
/ 30 марта 2010

Проблема кажется довольно странной.
Какова форма этих вопросительных знаков? Это черные бриллианты с вопросами или просто знаки вопроса?
Прежде всего, дважды проверьте, действительно ли ваши файлы закодированы utf-8.
Попробуйте добавить этот заголовок в ваш код (прежде всего вывод)

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

Но я сомневаюсь, что это поможет, поскольку текст вашей базы данных уже выглядит хорошо.
У вас есть SET NAMES запросы в вашем коде? Что charset установлено?

1 голос
/ 31 марта 2010

Это как-то связано с кодировкой файлов php. Файлы были созданы с помощью Windows Notepad и сохранены в кодировке utf-8.

Когда я использовал Notepad2 для открытия файлов, кодировка файлов была "utf-8 with signature". Когда я изменил кодировку на «utf-8», текст отображается правильно.

0 голосов
/ 24 июня 2018

Для меня линия, которая имела значение, следующая:

$mysqli->set_charset("utf8")

Прямо со страницы документации PHP .

Сервер возвращал латиницу, после установки кодировки в utf8 теперь работает нормально.

0 голосов
/ 22 декабря 2010

Я боролся с той же самой проблемой, так как пытаюсь добавить немного французской / немецкой интернационализации к нескольким элементам управления в виджете.

Символы с акцентами, которые хранятся в моей базе данных, печатаются как 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.

0 голосов
/ 30 марта 2010

Причиной вашей проблемы часто является случайное перекодирование файлов скриптов редактором программиста. Это не хорошая практика, чтобы жестко кодировать строки, которые полагаются на кодирование в ваших файлах php.

Попробуйте переключить кодировку вашего браузера, чтобы определить, какая кодировка используется для жестко закодированного текста, это может помочь вам решить проблему. Также убедитесь, что отправляете правильные заголовки http для каждой страницы:

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

Дополнительно вы можете вставить метатег в ваш HTML:

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