2016-04-08 6 views
0

私のサイトのユーザーがプレーンテキストコメントを送信できるようにしたいと考えています。これらのコメントを自分のサイトに提示すると、HTMLとして表示されます(つまり、<p>タグで、改行は<br>)。Silverstripe 3.3 - HTML形式のテキストをフロントエンドフォームからデータベースに保存するにはどうすればよいですか?

Silverstripe 3.3でプレーンテキストをHTMLとして表示するにはどうすればよいですか?

私は

private static $db = array (
     'MyText' => 'HTMLText', 
); 

でのDataObjectを持っていると、フォーム:

public function MyForm() { 
     $myForm = Form::create(
      $this, 
      __FUNCTION__, 
      FieldList::create(
       HtmlEditorField::create('MyText') 
     ), 
      FieldList::create(
       FormAction::create('submit','Submit') 
     ) 
    ); 
     return $myForm; 
} 

私は機能を提出し、現在、それはプレーンテキストとしてテキストを保存し、この

public function submit($data, $form) { 
     $myDataobject = new MyDataobject(); 
     $form->saveInto($myDataobject); 
     $myDataobject->write(); 

     $form->sessionMessage('Message saved.','good'); 
     return $this->redirectBack(); 
} 

のようなものですHTMLなしの文字列。

+0

これは間違っています。あなたは「シンプルな弦」とはどういう意味ですか?追加しているHTMLは何ですか? –

+0

私が意味するのは、ユーザーがテキストエリアにテキストを書き込んだときに、テキストにいくつかの改行/段落がある場合、私のデータベースにhtmlタグを含むテキストを保存したいということです: "

こんにちは、
質問があります。 ..(...)

" – iraira

+0

ああ、textarrafieldはHtmlEditorFieldとはサンプルコードではかなり異なっています。 –

答えて

1

OK - ご意見から、あなたのサンプルコードは実際に行っているものではなく、HTMLEditorFieldの代わりにTextareaFieldを使用しているようです。あなたは選択肢のカップルを持っているので、

これは、罰金です:

  1. は、フォームの送信を書き込む前にHTMLを追加します。

    パブリック関数は($データ、$形式)を提出{ $ myDataobject =新しいMyDataオブジェクト(); $ form-> saveInto($ myDataobject); $ myDataobject-> MyText = sprintf( '

    %s

    '、nl2br(Convert :: raw2xml($ data ['MyText'])))); $ myDataobject-> write();

    $form->sessionMessage('Message saved.','good'); 
        return $this->redirectBack(); 
    

    }

Convert::raw2htmlの使用に注意してください - これなしで、あなたはおそらくHTMLインジェクション攻撃を実行するためにHTMLを提出悪意のあるユーザーに対して脆弱になるでしょう。

  • モデルにセッターを追加:

    クラスMyDataobjectはDataObjectの{

    ...

    public function setMyText($value) { 
        return $this->setField('MyText', sprintf('<p>%s</p>', nl2br(Convert::raw2xml($value))); 
    } 
    

    }

  • を拡張

    このアプローチはいつでも非常に壊れやすくなりますeが設定されていると、HTMLを意図的に設定しているときにエンコードされます。

    推奨ソリューション:#1

    +0

    ありがとうございました。あなたのソリューション#1は動作しますが、raw2htmlがSS 3.3に存在しないため、raw2htmlの代わりにraw2htmlattを使用しなければなりませんでした。そして:私はTextareaFieldを使用していません、私はHTMLEditorFieldを使用していますが、フロントエンドのフォームでそれを使用すると、属性tinymce = "true"の単純なtextareaフィールドが表示されます。とにかくそれは休憩なしにテキストを保存しました。あなたのソリューションで今すぐ動作します。 – iraira

    +0

    ああ、申し訳ありません - それは 'Convert :: raw2xml'です –

    関連する問題