1

我正在尝试填充这样的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,因此双字节表示中的第二个字符以某种方式使该字段无法完全接收文本。

4

1 回答 1

0

如问题更新中所述,罪魁祸首是字符“ß”,该字符在数据库中被编码为两个字符“Ô。该字符第一次出现在文本中的位置 2934,因此双字节表示中的第二个字符以某种方式破坏了该字段完全接收文本。

正如ficuscr在他的评论中指出的那样,破坏文本的是对该str_replace函数的调用。将其替换为对 的调用后preg_replace,文本已正确保存在数据库中,并且该字段收到了全文。

于 2013-03-13T15:59:51.610 回答