У меня есть сайт, на котором я использовал php для включения разделов, а не для дублирования кода для каждой страницы.
Однако недавно мой веб-хостинг обновил PHP до 5.6, и теперь все мои Æ, Ø и Å дают мне заменяющий символ ( ).
Я не запускаю никаких баз данных, и настройка кодировки в html не помогла.
Я очень неопытен с PHP, поэтому я понятия не имею, как это исправить.
Пожалуйста, любая помощь будет замечательной!
У меня была такая же проблема после обновления с php 5.5. до 5.6.
Решил его, установив default_charset в пустую строку в моем скрипте:
ini_set("default_charset", "");
Или если у вас есть acceess для php.ini, вы можете установить default_charset = ""
вместо этого.
Дополнительная информация: https://www.saotn.org/php-56-default_charset-change-may-break-html-output/
PHP 5.6 изменяет значение по умолчанию default_charset
на UTF-8
. Значение лучше установить.
Если кодировка ваших php-файлов – ISO-8859-1
(все в каталоге), вы можете легко поместить файл .htaccess в корневой каталог:
php_value default_charset ISO-8859-1
Если только некоторые из ваших файлов находятся в ISO-8859-1, вы можете легко отправить заголовок в первой строке файла php (нет необходимости в default_charset):
<?php header('Content-Type: text/html; charset=iso-8859-1'); ?>
Или преобразовать кодировку php textfiles в utf8 и не изменять значения по умолчанию.
На данный момент лучше всего переходить на PHP 5.5 или 5.4, из-за того, что CBroe объяснил в своем комментарии тем, что PHP 5.6 теперь устанавливает кодировку по умолчанию как UTF-8, и многие сайты по-прежнему не готовы к этому. У меня была такая же проблема после перехода на новый сервер, поэтому я понизился до PHP 5.5 и автоматически все специальные символы снова отображаются правильно. Если вы используете WHM, используйте EasyApache для восстановления Apache и затем выберите нужную версию PHP при появлении запроса.
Я лично считаю, что разработчики PHP должны лучше предупреждать пользователей, я имею в виду, что при обновлении до версии 5.6 могут возникать проблемы с особыми символами для незашифрованных веб-сайтов или приложений UTF-8. То, что они делали, просто навязывало UTF-8 миллионам разработчиков по всему миру, было слишком быстрым или даже слишком радикальным.
Если у вас есть веб-сервер с несколькими хостами, особенно со старыми веб-сайтами и несколькими языками , для максимальной совместимости с более ранними версиями PHP, такими как 5.4, просто принудительно сбросьте значение default_charset в /etc/php…/php.ini:
В глобальном разделе [PHP] найдите этот ключ и отредактируйте его так:
default_charset = ""
Это не будет заставлять PHP устанавливать кодировку UTF-8 для всех php-файлов, особенно устаревшую или национальную кодировку, такую как windows-1251
, windows-1257
, iso-8859-1
, iso-8859-2
, ISO-8859-13
и аналогичные ,
Или, если вы разработчик, обязательно используйте ответ Роба и добавьте код непосредственно в php-приложение ini_set("default_charset", "");