Joomla 1.5 При добавлении данных в базу из редактора, некоторые символы "портятся"

Тема в разделе "Создание расширений для Joomla", создана пользователем Schemer, 26.02.2009.

  1. Schemer
    Offline

    Schemer Недавно здесь

    Регистрация:
    26.11.2007
    Сообщения:
    49
    Симпатии:
    1
    Пол:
    Мужской
    Здравствуйте.
    Пишу админку для собственного компонента. Необходима возможность обновления/добавления записей в БД, в соответствующую таблицу. Нужное поле в таблице, имеет тип TEXT. В данном поле хранится строчка содержащая HTML код.

    Итак, в файл "представления" в административной части данного компонента, добавляю редактор:
    Код (PHP):
    1. <?php  
    2.             $editor =& JFactory::getEditor();
    3.             echo $editor->display('text',$this->edit->text, 600, 500, 10, 10);  
    4.         ?>


    В модели получаю данные из формы и переношу их в таблицу:
    Код (PHP):
    1. $row = & $this->getTable();
    2.         $data = JRequest::get('POST', JREQUEST_ALLOWHTML);


    В итоге, все отлично редактируется и добавляется, НО за одним лишь исключением, которое мне совершенно не понятно...

    Если в данное поле попытаться вставить изображение, то для нега img прописывается атрибут border, в значение, которого прописывается непонятный символ, выглядит это так:

    Код (html):
    1. <img src="856f08c.png" border="�"


    Если я в попытаюсь отредактировать эту запись и в атрибут border поставить другое значение, например - "1", то все отлично. Как только пытаюсь вставить "0", получатся опять вот такая ерунда.


    Буду благодарен любой подсказке. Что я делаю не так? Где может быть проблема. Заранее спасибо.

    P.S. В базе данные храню в UTF8.
     
  2.  
  3. chilly_bang
    Offline

    chilly_bang Недавно здесь => Cпециалист <=

    Регистрация:
    30.04.2006
    Сообщения:
    1 541
    Симпатии:
    38
    Пол:
    Мужской
    имхо гдето нехватает эксплицитного указания о кодировке. хотя конечно мистика, если только ноль затрагивает... в любом случае очень интересно. а кстати глянь в какой кодировке работает вставлялка картинок редактора? вставлялка ведь плагин? может там надо уникод засандалить жёстко? или насильно в уникод перекодировать налету... как–то так в общем.
    а, и попробуй, как вставляет картинки родная вставлялка, есть ли с ней проблемы. если нету, может ей вставлять?
     
  4. Schemer
    Offline

    Schemer Недавно здесь

    Регистрация:
    26.11.2007
    Сообщения:
    49
    Симпатии:
    1
    Пол:
    Мужской
    chilly_bang, о, благодарю за отзыв. =)
    Но, думаю, дело не в плагине. Просто, к примеру, если я в конфигурации отключаю редактор, то есть оставляю простой html редактор. То проблема остается та же. Разве в простом редакторе плагин изображений тоже задействован? Кстати, я вообще не нашел такой плагин.
    chilly_bang, но твоя мысля мне кажется логичной, попробую покапать код самого редактор.

    Хотя, мне кажется, что проблема все-таки где-то на этапе непосредственного добавления в БД.
    Кстати, а никто не знает, после получения данных из редактор (полей) их не нужно как-нибудь обрабатывать перед добавлением в БД?
     
  5. chilly_bang
    Offline

    chilly_bang Недавно здесь => Cпециалист <=

    Регистрация:
    30.04.2006
    Сообщения:
    1 541
    Симпатии:
    38
    Пол:
    Мужской
    эт что такое? в смысле ты wysiwyg отключаешь? а как тогда картинка с атрибутами вставляется? и кстати, как себя вообще ведёт кнопка mosimage?

    ну, если ты пользуешься чем–то типа tinyMCE или JCE, так там ведь каждая функция редактора – отдельная фишка со своими файлами.
     
  6. Schemer
    Offline

    Schemer Недавно здесь

    Регистрация:
    26.11.2007
    Сообщения:
    49
    Симпатии:
    1
    Пол:
    Мужской
    Именно так.
    Да она не с атрибутами вставляется. Я тупо в поле прописываю, к примеру - <img src="..." /> сохраняю, а он все равно в базу заносит img с атрибутом border, ну и с этим карявым символом. То есть, проблема, наверное, не с редактором и не с плагином картинки, а где-то на этапе обработки данных из поля, или добавления в базу. Чего-то я вообще не понимаю.

    Причем, все стандартные то компоненты работают нормально. Такой баг только в моем компоненте. Но делал я вроде бы все по аналогии.

    Да, вообще, я использую tinyMCE.
     
  7. chilly_bang
    Offline

    chilly_bang Недавно здесь => Cпециалист <=

    Регистрация:
    30.04.2006
    Сообщения:
    1 541
    Симпатии:
    38
    Пол:
    Мужской
    вот этого врага и надо искать, который туда бордер пишет. он же туда и дулю вместо нуля пишет. я так навскидку не скажу, кто виноват – надо это дело исследовать. погоди, может подойдут люди, кто встречался с такой заразой.
     
  8. Schemer
    Offline

    Schemer Недавно здесь

    Регистрация:
    26.11.2007
    Сообщения:
    49
    Симпатии:
    1
    Пол:
    Мужской
    Алилуйя!! Ха-ха, победа. B)

    Похоже, что виновной оказалась моя невнимательность, или самоуверенность.

    Пришлось еще раз обратиться к докам, а именно вот сюда - http://docs.joomla.org/How_to_use_the_editor_in_a_component

    И обнаружил я там вот такие две интересные строчки:
    Код (PHP):
    1. //get data from request
    2.         $post = JRequest::get('post');
    3.         $post['content'] = JRequest::getVar('content', '', 'post', 'string', JREQUEST_ALLOWRAW);

    Я и раньше, в других источниках видел, что данные из формы получаются именно таким способом. Но так же я видел и другой способ, описанный мною в первом посте:
    Код (PHP):
    1. $data = JRequest::get('POST', JREQUEST_ALLOWHTML);

    Я почему то решил, что этого будет вполне достаточно... (поидее же все логично - получить данные методом POST и разрешить html) Оказывается нифига подобного. Получается, что данные из поля редактора должны импортироваться только с помощью метода JRequest::getVar.

    Короче говоря, добавил метод getVar в свой компонент, и все заработало. Теперь при сохранении цифры 0 в бордере, она ни в какой другой символ не конвертится. =))

    P.S. chilly_bang, спасибо за участие.
    Может быть мой пост кому-нибудь когда-нибудь тоже поможет. =)
     

Поделиться этой страницей

Загрузка...