2

Joomla 2.5 でカスタム コンポーネントを作成しようとしていますが、エディター フィールドからすべての html タグ (リンク、改行、p タグ) を取り除くのを止めるのに苦労しています。フォーム フィールドは次のとおりです。

<field
    name="post"
    type="editor"
    label="COM_HELLO_WORLD_EDITOR_LABEL"
    description="COM_HELLO_WORLD_EDITOR_DESC"
    class="inputbox"
    filter="JComponentHelper::filterText"
    required="true"
    default=""
/>

明らかに、SO と Joomla の両方のフォーラムに、これに関する多くの投稿があります。しかし、彼らは一般的に2つの明確なテーマを持っているようです.

  1. Tiny MCE の設定。デフォルトのエディターを「なし」(つまり、テキスト領域のみ) に設定した後にチェックしたところ、タグはすべて削除されたままです
  2. Joomla テキスト フィルターの設定。スーパーユーザーが「フィルタリングなし」に設定されたグローバル管理者としてログインしています

このためのモデルの保存機能を次のようにオーバーライドしています。

function store()
{
    $row =& $this->getTable();
    $input = new JInput();
    $data = $input->getArray($_POST);

    //Sets Users id as current logged in user if not set
    if(!$data['jform']['post_user']) {
        $data['jform']['post_user']=JFactory::getUser()->id;
    }

    // Bind the form fields to the post table
    if (!$row->bind($data['jform'])) {
        $this->setError($this->_db->getErrorMsg());
        return false;
    }

    // Make sure the hello is valid
    if (!$row->check()) {
        $this->setError($this->_db->getErrorMsg());
        return false;
    }

    // Store the hello table to the database
    if (!$row->store()) {
        $this->setError($this->_db->getErrorMsg());
        return false;
    }
    return true;
}

私の直感は、JInput が HTML タグを削除することに関係しているということです。しかし、保存ファイルに余分な行を追加して$data['jform']['post']=$input->getHTML('post');も何も起こりませんでした。だから、ここからどこへ行けばいいのか本当にわかりません。何か案は?


アップデート

問題をすばやく明確にするために-コンポーネントの各タグを手動で設定するのではなく、「グローバル構成」の下にあるプリセットのJoomla「テキストフィルター」設定を使用したい!


更新 2

エディター フォーム フィールドに filter="raw" を追加しました。<p>変数をダンプすると、html タグが表示されるようになりました$_POST['jform']['post'], null, 'HTML')。ただし、単純な JInput Filter 関数のみを適用すると、Joomla Config 値を適用することは言うまでもなく、null になります。

    $input = new JInput();
    $data = $input->getArray($_POST);
    $data['jform']['post']=$input->get($_POST['jform']['post'], null, 'HTML');

ここの文は「HTML - フィルタのホワイト リストまたはブラック リストの対象となる、HTML エンティティとタグをそのまま含む文字列を返します」です。Global Config Text フィルター設定を参照して JInput HTML フィルターを記述しますか? ただ確認するため?

4

3 に答える 3

1

このようなことを試してください

$input_options = JFilterInput::getInstance(
        array(
            'img','p','a','u','i','b','strong','span','div','ul','li','ol','h1','h2','h3','h4','h5',
            'table','tr','td','th','tbody','theader','tfooter','br'
        ),
        array(
            'src','width','height','alt','style','href','rel','target','align','valign','border','cellpading',
            'cellspacing','title','id','class'
        )
    );

    $postData = new JInput($_POST,array('filter' => $input_options));

最初の配列は許可されたタグで、2 番目の配列は許可された属性です。

于 2013-03-02T15:30:13.153 に答える
0

かなり時間が経ちましたが、記録のために、同じ問題に遭遇した人のために、ここに私の解決策があります。

私にとって、この問題は、JInput の代わりに JRequest を使用することですぐに解決されました。非推奨だと思いますが、JControllerForm の save() 関数で Joomla 2.5.14 (現時点では最新の Joomla 2.5) でまだ使用されています。

于 2013-10-16T14:29:22.150 に答える
0

これは何についてですか?filter="JComponentHelper::filterText"? カスタムフィルターを作成しましたか?

Joomla (たとえば acl など) のほとんどのものと同様に、デフォルトのフィルタリングは非常に厳密であるため、フィルタリングしないことで xss が発生した場合、それは意図的な選択であり、コアのセキュリティ リスクではありません。ただし、コアフィルタリングが適用されている必要があります...ただし、不明なフィルターでおそらくオーバーライドされているようです。したがって、この未知のフィルターを考えると、非常に文字列に戻っているのではないかと思います。

于 2013-03-03T13:28:42.140 に答える