Единственное, что приходит в голову — переименовать CHtml в COldHtml и уже от него наследовать CHtml с новым методом encode. Такой вариант мне не нравится, так как требует изменение кода фреймворка.
Существуют ли какие-нибудь варианты сделать это без изменения кода фреймворка?
Так не очень удобно, придется переопределять почти всё из «system.zii.widgets.*», там где-то напрямую, где-то опосредовано, например через <CFormatter>Yii::app()->format->formatText(), используется CHtml::encode().
Не то чтобы слишком много определений получается, просто у меня не возникает уверенности, что везде будет вызван мой EHtml.
Необходимо (помимо вызова htmlspecialchars) экранировать дополнительные символы — «{» и «}». Возможно, на самом деле, копаю в неправильном направлении, буду признателен если посоветуете альтернативное направление раскопок.
В принципе есть еще один вариант, не знаю лучше он или хуже, но суть в следующем: вариант с $classMap не работает потому, что yii сначала проверяет приватный массив $_coreClasses, а потом уже $classMap.
Сам массив определен в YiiBase.php и, в принципе, не сложно использовать свой YiiBase.php вместо оригинального.
Порядок подключения файлов в данном случае: index.php -> yii.php -> YiiBase.php.
Файл yii.php практически ничего, кроме подключения YiiBase не делает, т.е. можно сделать: index.php -> myyii.php -> MyYiiBase.php.
И уже в MyYiiBase.php можно будет прописать свои пути к core классам.