【发布时间】:2013-03-13 23:59:51
【问题描述】:
我正在尝试填充像这样定义的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 KB。除了将字段拆分为两个单独的表单元素之外,我该如何解决这个问题?
更新 罪魁祸首似乎是字符“ß”,它在数据库中被编码为两个字符,“Ô。该字符第一次出现在文本中的位置 2934,因此双字节表示中的第二个字符以某种方式破坏了该字段完全接收文本。
【问题讨论】:
-
您确定问题不是从数据库中取出 blob 吗?问题似乎更可能存在,而不是让表单元素获取那么多数据。
-
不,我很肯定正在从数据库中检索文本,原因有两个:1)我尝试简单地
echoing 它,成功了,2)如果我改为使用substr($page['body'], 1, 2934),表单元素已正确填充。substr($page['body'], 1, 2935)已经不是了。 -
将 HTML 吐出到 textarea... 如果您查看页面源代码,是否所有内容都在那里?您可能需要考虑使用 WYSIWYG 编辑器或通过
htmlentitites()运行它。见:stackoverflow.com/questions/3777297/… -
没有 html_entity_decode 和/或 str_replace 是否可以工作?
-
html_entity_decode的默认编码是 UTF-8。至于str_replace...“在多字节字符串上使用单字节字符串函数可能会导致意外结果”,参考:stackoverflow.com/questions/3786003/… 可能更改为preg_replace- 很确定无需触摸mb_ereg_replace。
标签: html zend-framework textarea