специальные символы utf-8 не отображаются


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

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

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

Author: robert, 2011-12-02

7 answers

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

Прежде всего, убедитесь, что файл действительно сохранен в формате 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.

 46
Author: RCE, 2011-12-02 13:04:02

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

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

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

default_charset = "UTF-8"

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

Если у вас нет доступного файла php.ini, вы можете изменить его с помощью кода следующим образом хорошо, используя ini_set Документы функция:

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">
    ...

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

 6
Author: hakre, 2011-12-02 12:33:20

Установите мета-тег в заголовке как

 <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);

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

 3
Author: user2842936, 2014-01-24 14:08:48

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

Вот так

setlocale(LC_ALL, 'fr_CA.utf-8');
 2
Author: VVV, 2015-04-24 16:02:42

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

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

 1
Author: Binod, 2015-04-06 12:27:01

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

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
Author: Mauricio, 2017-09-04 19:41:24

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

$str = "камэ";

Эхо-код utf8_encode($str);

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

 1
Author: Kamran Sohail, 2018-06-12 10:26:20