2013-03-11 53 views
1

裝載大文成Zend的textarea的我試圖填充textarea這樣從數據庫

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

從數據庫記錄中定義。該記錄是以UTF-8格式包含頁面的HTML文本的BLOB。

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

不幸的是,當文本的長度大於2934個字節時,該字段不是在所有填充。我試圖通過發行設置maxlength

'maxlength' => '4096', 

但它似乎沒有效果。現在

,從我可以在網上找到,textarea限額應大於2934個字節,更接近30-60 KB。除了將領域分成兩個單獨的表單元素外,我怎麼能解決這個問題呢?

更新 似乎罪魁禍首是字符「ß」,它在數據庫中編碼爲兩個字符「Ã」。該字符的第一次出現位於文本內的位置2934處,因此,兩字節表示中的第二個字符以某種方式將字段從完全接收文本中斷開。

+1

你確定問題沒有得到BLOB從數據庫中?看起來問題更可能出現在那裏,而不是獲取表單元素來獲取那麼多數據。 – ficuscr 2013-03-11 16:33:15

+0

不,我正文本正在從數據庫中檢索,原因有二:1)我想清楚'echo'ing它,成功,2)如果我做'SUBSTR($頁[「身體」],1 ,2934)'而不是,表單元素正確填充。用'substr($ page ['body'],1,295)'它已經不是。 – Vilinkameni 2013-03-11 18:10:23

+0

將HTML傳播到textarea中......如果你看看頁面的源代碼就是一切嗎?您可能需要查看使用所見即所得編輯器或通過'htmlentitites()'運行它。請參閱:http://stackoverflow.com/questions/3777297/php-html-form-textarea-containing-html – ficuscr 2013-03-11 20:01:33

回答

0

作爲一個更新的問題說,罪魁禍首是字符「SS」,這是在數據庫中編碼爲兩個字符,「A」。該字符第一次出現在文本中的第2934位,所以第二個字符以兩字節表示從某種程度上打破了從完全接收文本開始的字段。

由於ficuscr在他的評論中指出的那樣,有什麼損壞文本是對str_replace函數的調用。撥打電話preg_replace替換後,文本正確地保存在數據庫中,並且該字段收到全文。