Html 从数据库将大文本加载到Zend textarea
我试图填充这样定义的Html 从数据库将大文本加载到Zend textarea,html,zend-framework,textarea,Html,Zend Framework,Textarea,我试图填充这样定义的textarea $this->addElement('textarea', 'body', array( 'label' => $translate->translate('Contents:'), 'cols' => '80', 'rows' => '24', 'required' => true )); 从数据库记录。该记录是一个BLOB,包含页面的HTML文本,采用UTF-8格式 $form->populat
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' => '4096',
但似乎没有效果
现在,从我在网上找到的信息来看,textarea
限制应该大于2934字节,更接近30-60KB。除了将字段拆分为两个单独的表单元素之外,我如何解决这个问题
更新
罪魁祸首似乎是字符“ß”,在数据库中被编码为两个字符“Ô�". 该字符第一次出现在文本中的2934位置,因此双字节表示中的第二个字符以某种方式使字段无法完全接收文本。如问题更新中所述,罪魁祸首是字符“ß”,该字符在数据库中编码为两个字符“Ô�“。该字符第一次出现在文本中的2934位置,因此两字节表示法中的第二个字符以某种方式使字段无法完全接收文本
正如ficuscr在他的评论中指出的那样,破坏文本的是调用
str_replace
函数。在调用preg_replace
函数替换文本后,文本被正确地保存在数据库中,字段收到了全文。您确定问题不在于将blob从数据库中取出吗?似乎更糟e问题可能就在那里,而不是让表单元素获取那么多数据。不,我肯定文本正在从数据库中检索,原因有两个:1)我简单地尝试了echo
ing,成功了,2)如果我做了substr('page['body',12934)
相反,表单元素是正确填充的。使用substr($page['body',12935)
它已经不是了。将HTML吐出到文本区域…如果您查看页面源代码,所有内容都在吗?您可能需要使用WYSIWYG编辑器或通过HTMLentites()运行它
。请参阅:在没有html\u entity\u decode和/或str\u replace的情况下,它可以工作吗?html\u entity\u decode
上的默认编码是UTF-8。至于str\u replace
“…”在多字节字符串上使用单字节字符串函数可能会导致意外结果“,ref:可能更改为preg\u replace
-非常确定无需触摸mb\u ereg\u replace
。