2013-03-11 8 views
1

Я пытаюсь заполнить textarea определяются как этотЗагрузка большого текста в текстовое поле Зенда из базы данных

$this->addElement('textarea', 'body', array(
    'label' => $translate->translate('Contents:'), 
    'cols' => '80', 
    'rows' => '24', 
    'required' => true 
)); 

из записи базы данных. Запись - это BLOB, содержащий HTML-текст страниц, в UTF-8.

$form->populate(array(
    // ... 
    'body' => 
    str_replace("\\n", "\n", 
     html_entity_decode(
     $page['body'] 
    ) 
    ), 
    // ... 
)); 

К сожалению, если длина текста больше 2934 байт, это поле вообще не заполнено. Я попытался установить maxlength путем выдачи

'maxlength' => '4096', 

но, кажется, не имеют никакого эффекта.

Теперь, из того, что я могу найти в Интернете, пределы textarea должны быть больше 2934 байтов, ближе к 30-60 КБ. Помимо использования разбиения поля на два отдельных элемента формы, как я могу исправить эту проблему?

Update Кажется, что преступник был характер «ß», который кодируется в базе данных в виде двух символов «A». Первое появление этого символа находится в позиции 2934 в тексте, поэтому второй символ в двухбайтовом представлении каким-то образом разбивает поле на получение текста полностью.

+1

Вы уверены, что проблема не в том, чтобы получить blob из базы данных? Похоже, что проблема была бы там, а не с тем, чтобы элемент формы принимал столько данных. – ficuscr

+0

Нет, я уверен, что текст извлекается из базы данных по двум причинам: 1) Я попробовал просто «эхо» с успехом, 2), если я делаю 'substr ($ page ['body'], 1 , 2934) ', элемент формы правильно заполнен. С 'substr ($ page ['body'], 1, 2935)' it уже нет. – Vilinkameni

+0

Выплескивание HTML в текстовое поле ... Если вы посмотрите на источник страницы, то все есть? Вам может потребоваться использовать редактор WYSIWYG или запустить его через 'htmlentitites()'. См. Http://stackoverflow.com/questions/3777297/php-html-form-textarea-containing-html – ficuscr

ответ

0

Как указано в обновлении вопроса, виновником был символ «ß», который был закодирован в базе данных как два символа «Ã ». Первое появление этого символа находилось в позиции 2934 в тексте, поэтому второй символ в двухбайтовом представлении каким-то образом сломал поле, получив текст целиком.

Как ficuscr указал в своем комментарии, что искаженное текстом было вызовом функции str_replace. После замены его на вызов preg_replace текст был сохранен в базе данных правильно, и поле получило полный текст.

Смежные вопросы