1

私は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',

しかし、効果がないようです。

現在、Web で見つけたものから、textarea制限は 2934 バイトより大きく、30 ~ 60 KB に近いはずです。フィールドを 2 つの個別のフォーム要素に分割する以外に、この問題を解決するにはどうすればよいでしょうか?

更新 犯人は文字 "ß" だったようです。これは、データベースで 2 つの文字 "Ã�" としてエンコードされています。その文字が最初に出現するのはテキスト内の 2934 の位置であるため、2 バイト表現の 2 番目の文字は、テキストを完全に受信することから何らかの形でフィールドを壊します。

4

1 に答える 1

0

質問の更新で述べたように、原因は文字「ß」であり、データベースでは 2 つの文字「Ã�」としてエンコードされていました。その文字が最初に出現したのは、テキスト内の 2934 の位置だったので、2 バイト表現の 2 番目の文字が何らかの形でフィールドを壊し、テキストを完全に受け取ることができませんでした。

ficuscrがコメントで指摘したように、テキストを破損させたのは関数の呼び出しでしたstr_replace。への呼び出しに置き換えた後preg_replace、テキストはデータベースに適切に保存され、フィールドは全文を受け取りました。

于 2013-03-13T15:59:51.610 に答える