我正在尝试填充像这样定义的textarea
$this->addElement('textarea', 'body', array(
'label' => $translate->translate('Contents:'),
'cols' => '80',
'rows' => '24',
'required' => true
));
来自数据库记录。该记录是一个包含HTML文本页面的BLOB,格式为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,因此双字节表示中的第二个字符以某种方式打破了字段完全接收文本。
答案 0 :(得分:0)
如问题更新中所述,罪魁祸首是字符“ß”,它在数据库中编码为两个字符“ ”。该角色的第一个出现位于文本中的位置2934,因此两个字节表示中的第二个字符以某种方式打破了字段完全接收文本。
正如 ficuscr 在他的评论中指出的那样,文本损坏的是对str_replace
函数的调用。通过调用preg_replace
替换它后,文本正确保存在数据库中,并且字段收到了全文。