Проблемы с кодировкой в ресурсах PLAIN_TEXT и WIKI

Проблемы с кодировкой в ресурсах PLAIN_TEXT и WIKI

от Alex Djachenko -
Количество ответов: 13
Изображение пользователя Developers Изображение пользователя Майнтейнер перевода Изображение пользователя ООО "Открытые Технологии" Изображение пользователя Тестер Moodle Изображение пользователя Эксперт по Moodle
Как выяснил Dmitry Pupinin проблема связана с использованием функции htmlentities(), которая заменяет все нелатинские символы на их html представление.
Проблему можно решить, если заменить вызовы
"htmlentities($text)"
на
"htmlentities($text,ENT_COMPAT,get_string("thischarset","moodle"))"

Прилагаю патч, исправшяющий проблему с ресурсами в формате "простой текст" в moodle 1.4.3 +
Этот файл нужно положить в папку moodle/lib
В ответ на Alex Djachenko

Re: Проблемы с кодировкой в ресурсах PLAIN_TEXT и WIKI

от Maryia Davidouskaia -
Сообщалось ли данное решение проблемы разработчикам? Может есть смысл отправить инфо на bug tracker?
В ответ на Maryia Davidouskaia

Re: Проблемы с кодировкой в ресурсах PLAIN_TEXT и WIKI

от Dmitry Pupinin -

Исправление проблемы PLAIN_TEXT я уже давно направил Мартину … не помню помещал ли в багтракер, возможно по этому она еще не исправлена … Я проверю …

Данная проблема исправляется просто:

  1. Найдите файл /lib/weblib.php
  2. Найдите в файле функцию format_text (~632 строка)
  3. Закоментируйте одну строку в этой функции двумя слэшами

        case FORMAT_PLAIN:
    

    // $text = htmlentities($text); $text = rebuildnolinktag($text); $text = str_replace(" ", "  ", $text); $text = nl2br($text); break;

А что с Wiki? Как я понял речь идет о ресурсе, а не о модуле …

В ответ на Dmitry Pupinin

Re: Проблемы с кодировкой в ресурсах PLAIN_TEXT и WIKI

от Alex Djachenko -
Изображение пользователя Developers Изображение пользователя Майнтейнер перевода Изображение пользователя ООО "Открытые Технологии" Изображение пользователя Тестер Moodle Изображение пользователя Эксперт по Moodle
Там тоже самое: вызывается htmlentities() без указания кодировки.
В результате - русский текст отображается только "местами".
Да к тому же она там вызывается не единожды...
В ответ на Alex Djachenko

Re: Проблемы с кодировкой в ресурсах PLAIN_TEXT и WIKI

от Dmitry Pupinin -
Сори... не увидел начало обсуждения...

А это с какой версии PHP у htmlentities появилось столько аргументов? Такое наверное может не у всех заработать?

Простое отключение данной функции дает правильный результат. Или может есть какие-то тонкости?
В ответ на Dmitry Pupinin

Re: Проблемы с кодировкой в ресурсах PLAIN_TEXT и WIKI

от Alex Djachenko -
Изображение пользователя Developers Изображение пользователя Майнтейнер перевода Изображение пользователя ООО "Открытые Технологии" Изображение пользователя Тестер Moodle Изображение пользователя Эксперт по Moodle
С версии 4.1.0, но windows-1251 поддерживаются только с 4.3.2.
Но вместо нее можно использовать htmlspecialchars()

Назначение этой строчки - экранировать специальные символы html (в первую очередь "<"). Если этого не сделать, то текст будет отображаться неправильно. Например: после знака меньше оставшаяся часть текста не будет показана, или, если загрузить в качестве ресурса php-скрипт, пользователь php-кода не увидит.

В принципе, в нашем случае совершенно безболезненно можно использовать htmlspecialchars() вместо htmlentities(). Эта функция экранирует только специальные символы html, а кириллические символы совсем не трогает.

Если бы при загрузке ресурса PLAIN_TEXT была возможность указать его кодировку, функция htmlentities() с дополнительным параметром обеспечила бы правильное отображение текста, не зависимо от текущей кодировки просматривающего пользователя (например, стала бы возможна демонстрация "умляутов" в русском интерфесе - эту возможность оценили бы преподаватели французского, немецкого и латыни).
В ответ на Dmitry Pupinin

Re: Проблемы с кодировкой в ресурсах PLAIN_TEXT и WIKI

от Maryia Davidouskaia -
Дмитрий, скорее всего ошибка не исправлена. Дело в том, что в части ресурсов (текстовый, Wiki) в моем курсе "Демонстрация возможностей Moodle" (размещен на moodle.org) кириллический текст отображается некорректно. Пользователи очень просят решить проблему. Надеюсь на помощь!
В ответ на Alex Djachenko

Re: Проблемы с кодировкой в ресурсах PLAIN_TEXT и WIKI

от Vadim Bazilevich -
Спасибо Alex Djachenko за подсказку, благодаря ей (подсказке улыбаюсь ) я решил проблему с русским заголовками в модуле Wiki версия Moodle1.5.
Путь /mod/wiki/ewiki/ewiki.php
В функции ewiki_split_title
строчку return($entities ? htmlentities($id) : $id);
заменить на return($entities ? htmlentities($id, ENT_QUOTES, "cp1251") : $id);
В остальном пока вроде все нормально.
Ooops!
В функции ewiki_make_title надо исправить
$title = htmlentities ($title);
на
$title = htmlentities ($title, ENT_QUOTES, "cp1251");
В ответ на Vadim Bazilevich

Re: Проблемы с кодировкой в ресурсах PLAIN_TEXT и WIKI

от Dmitry Pupinin -
Вадим, вы не совсем правы.
в функции htmlentities нужно добавить именно
get_string("thischarset","moodle")
а не "cp1251". Так будет надежнее.
В ответ на Dmitry Pupinin

Re: Проблемы с кодировкой в ресурсах PLAIN_TEXT и WIKI

от Vadim Bazilevich -
У меня почему-то в таком виде функция не работает грущу
Ксати после 2 дней возни я разобрался как запустить 3D Quicktime из курса "Использование Moodle" госпожи Maryia Davidouskaia. Вообще я категорически против использования в курсах технологий которые могут работать лишь под одной платформой или только под определенными броузерами. Это имхо неправильно.
В ответ на Dmitry Pupinin

ewiki.php с предложенными исправлениями

от Ne Nashev -

Я установил себе на www.touchscience.ru версию 1.5.1, и поисправлял вызовы htmlentities. Теперь у меня wiki работает! Как давно я этого желал улыбаюсь)

Вот готовый файлик, всем желающим.

P.S.: Выкладывать его в CSV в таком виде вроде бы нельзя потому, что этих параметров у этой функции нет в достаточно распрастранённой предыдущей версии, а дистрибутив moodle должен быть работоспособным. Мартин в одном из форумов предлагал сделать для предыдущих версий функцию-заменитель со всеми параметрами, но насколько я понимаю, этого никто не делал ещё.

В ответ на Ne Nashev

Re: ewiki.php с предложенными исправлениями

от Dmitry Pupinin -
Так ить я уже давно публиковал исправления... еще зимой... выпучил глаза
Там, кстати не только в этом файлике нужно делать изменения...

А вообще хочу обратить ваше внимание на новый модуль dfwiki. Это существенно более крутой модуль, который активно разрабатывается. Недавно вышла версия 1.0 в которой глюков СУЩЕНСТВЕННО МЕНЬШЕ, а возможностей уже сейчас гораздо больше, чем в этом, извините за выражение, глюкало - ErfurtWiki!

Все можно найти в форуме Wiki, в том числе и патчик от вашего покорного слуги... широко улыбаюсь