Joomla编辑器剥离标记

Joomla编辑器剥离标记,joomla,joomla2.5,Joomla,Joomla2.5,我试图在Joomla2.5中创建一个自定义组件,并努力让它停止从编辑器字段中剥离所有html标记-链接、新行、p标记-全部工作。表单字段如下所示: <field name="post" type="editor" label="COM_HELLO_WORLD_EDITOR_LABEL" description="COM_HELLO_WORLD_EDITOR_DESC" class="inputbox" filter="JComponentHe

我试图在Joomla2.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=""
/>
我的直觉是这与JInput剥离HTML标记有关。但即使在保存文件
$data['jform']['post']=$input->getHTML('post')中添加额外的一行什么也没发生。所以我真的不确定接下来该怎么办。有什么想法吗


更新

只是为了快速澄清问题-我想使用“全局配置”下的预设Joomla“文本过滤器”设置,而不是手动设置组件中的每个标记


更新2

我在编辑器表单字段中添加了filter=“raw”。现在,当我转储变量
$\u POST['jform']['POST'],null,'html')
时,我看到了html
标记。然而,当只应用一个简单的JInput过滤器函数时——更不用说应用Joomla配置值了——我得到了null

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

“HTML-返回一个HTML实体和标记完整的字符串,以过滤器中的白名单或黑名单为准。”描述引用全局配置文本过滤器设置的JInput HTML过滤器?只是确认一下?

试试这样的方法

$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));

第一个数组是允许的标记,第二个数组是允许的属性。

这是关于什么的?filter=“JComponentHelper::filterText”?您是否编写了自定义筛选器


与Joomla中的大多数内容一样,默认筛选(也包括acl)非常严格,因此如果您从未筛选中获得xss,那么这是一个深思熟虑的选择,而不是在核心中造成安全风险。但是你的核心过滤应该被应用。。。除了您似乎已经被未知过滤器覆盖之外。所以我怀疑,考虑到这个未知的过滤器,它会回到非常弦的状态

过了一段时间,但为了记录在案,对于遇到相同问题的任何人,这里是我的解决方案


对我来说,使用JRequest而不是JInput立即解决了这个问题。我相信它已被弃用,但Joomla 2.5.14(目前最新的Joomla 2.5)仍在JControllerForm的save()函数中使用它。

您根本不需要任何过滤,或者?我希望使用Joomla过滤系统-如全局配置的文本过滤器区域所指定。因此,对于超级管理员,无需过滤。对于一些没有html,而对于其他选定的html。但是对于作为超级管理员的我来说,没有过滤是的。谢谢:)但是我希望应用全局权限中定义的默认Joomla文本过滤器-抱歉,我应该在我的问题中更清楚地说明这一点!没有。我的印象是这应用了全局配置中设置的Joomla过滤器。我在所有默认的Joomla组件中都找到了这个字符串。这里的API建议它“根据当前用户组的设置将全局文本过滤器应用于任意文本”,我认为这意味着它应用了“全局配置”中“文本过滤器”设置中的ACL设置,我也尝试过使用
Filter=“safehtml”
我在这里的文档页面中看到:也没有任何成功。有什么建议吗?是的,但我不认为这是xml的一部分。如果查看JFilterInput和JForm,您将看到可用筛选器的列表。JForm在basica JFilerInput列表中添加了一些内容。好吧,这样做很有意义——我稍后回到我的计算机时会尝试。那么相关的。在com_weblinks/com_content/com_categories等中定义的
jcomponentThelper::filterText
的额外过滤器在哪里?那么我需要xml中的任何过滤器吗?因为我假设将其留空也会导致html元素的过滤(docs for joomla editor字段说“filter(可选)允许系统保存某些html标记或原始数据”。这表明默认情况下它会去除标记。是的,默认情况下它是积极的,您可以使用filter=“raw”但是还有很多其他的选择。safehtml也很有攻击性,它仅限于你在评论系统中通常看到的标签类型。比如p、ul等,但绝对不是span、div或iframe。
$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));