специальные символы utf-8 не отображаются - PullRequest
24 голосов
/ 02 декабря 2011

Я переместил свой веб-сайт со своего локального тестового сервера на общий хостинг NameCheap, и теперь я столкнулся с проблемой - на некоторых страницах неправильно отображаются специальные символы utf-8 (вместо этого отображаются знаки вопроса).Все страницы имеют кодировку utf-8, как и все таблицы базы данных.Странно то, что некоторые страницы отображаются правильно, а некоторые - нет, по-видимому, случайным образом.

Например, моя страница индекса в порядке, но страница моего профиля - нет.faq.html работает нормально, но когда я переименую его в faq.php, это не так.И что самое странное, у меня есть страница с двумя вкладками JQuery, где одна отображается правильно, а другая нет!

Может кто-нибудь помочь мне с этим?

Ответы [ 8 ]

51 голосов
/ 02 декабря 2011

Это действительно надоедливая проблема, которую нужно исправить, но вы можете попробовать это.

Прежде всего, убедитесь, что файл действительно сохранен в формате UTF-8.

Затем проверьте, что у вас есть<meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> в вашем HTML-заголовке.

Вы также можете попробовать вызвать header('Content-Type: text/html; charset=utf-8'); в начале вашего PHP-скрипта или добавить AddDefaultCharset UTF-8 в ваш файл .htaccess.

6 голосов
/ 02 декабря 2011

Похоже, что если вы запрашиваете faq.html, веб-сервер сообщает вашему браузеру, что файл в кодировке UTF-8.

Убедитесь, что с вашим браузером, какая кодировка объявлена ​​и используется, пожалуйста, посмотрите документацию вашего браузера, как это сделать. Это есть в каждом браузере, чаще всего доступном через меню (чтобы указать ваши предпочтения, какую кодировку веб-сайта следует использовать), и чтобы узнать, что сервер вернул, вы часто найдете это в свойствах страницы.

Тогда звучит так, что если вы запрашиваете faq.php, веб-сервер сообщает вашему браузеру, что файл находится в другой кодировке. Вероятно, кодировка / кодировка не указана в соответствии с настройкой конфигурации PHP по умолчанию. Поскольку это файл PHP, чаще всего его можно решить, изменив конфигурацию PHP default_charset Документы директива:

default_charset = "UTF-8"

Найдите ваш php.ini на хосте и отредактируйте его соответствующим образом.

Если у вас нет php.ini, вы также можете изменить его по коду с помощью функции ini_set Docs :

ini_set('default_charset', 'UTF-8');

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

Ручная отправка строки заголовка Content-Type тоже работает:

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

Кроме того, хорошей практикой является то, что все выводимые вами HTML-страницы имеют этот заголовок и в своем разделе HTML <head>:

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

Надеюсь, это полезно.

3 голосов
/ 24 января 2014

установите метатег в голове как

 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> 

используйте ссылку http://www.i18nqa.com/debug/utf8-debug.html для замены нужного символа символов.

затем используйте str_replace как

    $find = array('“', '’', '…', '—', '–', '‘', 'é', 'Â', '•', 'Ëœ', 'â€'); // en dash
                        $replace = array('“', '’', '…', '—', '–', '‘', 'é', '', '•', '˜', '”');
$content = str_replace($find, $replace, $content);

Это метод, который я использую и очень помогаю.Спасибо!

2 голосов
/ 12 июня 2018

Я решаю свою проблему с помощью utf8_encode ();

$ str = "kamé";

echo utf8_encode ($ str);

Надеюсь, это кому-нибудь поможет.

2 голосов
/ 24 апреля 2015

Если вы используете PHP и ничего из вышеперечисленного не сработало (как это было в моем случае), вам нужно установить локаль с кодировкой utf-8.

Как это

setlocale(LC_ALL, 'fr_CA.utf-8');
1 голос
/ 04 сентября 2017

Проблема в том, что ваш файл не с той же кодировкой. Сначала запустите следующую команду во всех ваших файлах:

file -i filename.* 

Чтобы решить эту проблему, вы должны изменить все ваши файлы на uft-8. Вы можете сделать это с помощью команды iconv:

iconv -f fromcode -t tocode filename > newfilename

Пример:

iconv -f iso-8859-1 -t utf-8 index.html > fixed/index.html

После этого вы можете запустить файл -i fixedx / index.html и увидите, что ваш файл теперь находится в uft-8

1 голос
/ 06 апреля 2015

Если все остальные ответы у вас не сработали, попробуйте отключить перевод входной кодировки HTTP .

Этот параметр относится к расширению PHP mbstring .Это была проблема в моем случае.Этот параметр был включен по умолчанию на моем сервере.

0 голосов
/ 05 июня 2019

Добавление следующей строки в тег head исправило мою проблему.

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...