специальные символы utf-8 не отображаются
Я перенес свой веб-сайт с локального тестового сервера на общий хостинг NameCheap, и теперь у меня возникла проблема - на некоторых страницах неправильно отображаются специальные символы utf-8 (вместо этого отображаются вопросительные знаки). Все страницы закодированы в кодировке utf-8, как и все таблицы базы данных. Странно то, что некоторые страницы отображаются правильно, а некоторые - нет, по-видимому, случайным образом.
Например, моя страница индекса в порядке, но страница моего профиля - нет. faq.html работает нормально, но когда я переименовываю это для faq.php это не так. И что самое странное, у меня есть страница с двумя вкладками jQuery, где одна отображается правильно, а другая нет!
Может ли кто-нибудь помочь мне с этим?
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.
Похоже, что если вы запросите 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">
...
Надеюсь, это полезно.
Установите мета-тег в заголовке как
<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);
Это метод, который я использую и очень помогаю. Спасибо!
Если вы используете PHP и ничего из вышеперечисленного не сработало (как это было в моем случае), вам нужно установить языковой стандарт с кодировкой utf-8.
Вот так
setlocale(LC_ALL, 'fr_CA.utf-8');
Если все остальные ответы не сработали для вас, попробуйте отключить перевод кодировки ввода HTTP.
Это параметр, связанный с расширением PHP mbstring. В этом и была проблема в моем случае. Этот параметр был включен по умолчанию на моем сервере.
Проблема в том, что ваш файл имеет разную кодировку. Сначала выполните следующую команду во всех ваших файлах:
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
Я решаю свою проблему с помощью utf8_encode();
$str = "камэ";
Эхо-код utf8_encode($str);
Надеюсь, это кому-то поможет.