При попытке добавить ссылку на другой документ сайта в редакторе TinyMCE обнаружилась совсем неожиданная ошибка - выпадающий список дерева сайта отображается в неправильной кодировке:
Ситуация вообще-то странная по следующим причинам:
1. Весь контент сайта и всё оформление отображается в правильной кодировке.
2. Само диалоговое окно отображается в правильной кодировке.
3. Анализ кода файла, формирующего этот список показал, что список берется из глобального масива MODx, не читается из базы (здесь могли бы быть ошибки).
Пришлось взять файл assets/plugins/tinymce213afm/tinymce.linklist.php, вставить в него через echo сведения о charset и о массиве строк, передаваемых в окно. Выполнив этот PHP-скрипт через адресную строку браузера, мы увидели искаженные строки. При этом кодировка браузера была принудительно установлена на windows-1251. Переключив кодировку вручную на UTF-8 мы увидели правильные строки.
Вот теперь стало понятно, что к чему. Дело в том, что на нашем сервере почти все сайты работают в кодировке windows-1251. В настройках Apache указана кодировка по умолчанию windows-1251.
Для нашего виртуального хоста кодировка задана UTF-8. Сделано это с помощью директивы
AddDefaultCharset utf8
В результате в ответы на запросы браузеров сервер посылает в http-заголовке указание о том, что кодировка страниц этого сайта utf8.
Однако эта опция не действует на PHP-скрипты!
Пришлось вписать для нашего виртуального хоста директиву
php_admin_value default_charset utf8
И всё заработало! Список ссылок стал показываться правильно:
Замечание. Конечно никто не даст вам лазить в настройки виртуального хоста.
Это исключительная привилегия злобного сурового админа.
Мы попытались записать эту директиву в свой файл .htaccess. Оказалось, что этого делать нельзя - сервер выдает ошибку 500.
Написать комментарий