Joomla:清理文件数据的正确方法


Joomla: correct way to sanitize file data

我正在从csv文件编写导入脚本,我需要验证数据,大部分数据都是字符串,所以我想使用类似Jinput的东西来清理它。

Joomla已经为此目的拥有了一些东西吗?

最好有这样的东西

$field = JSanitizer::get($data/*array with data*/, "fieldname"/*name of field*/, 
    'string'/*type of data*/, 'null'/*default value*/);

此外,我需要它在Joomla 2.5和3.0版本中工作。

您可能正在寻找JFilterInput::clean() 这将按如下方式工作:

$field = JFilterInput::clean($data[$fieldname], 'filter');

这不会提供设置默认值的方法,因此您必须在之后处理它。这应该与通常使用 JInput 以及 JForm 元素(如果编写自定义组件)执行的筛选相同。

我似乎找不到所有过滤器的良好列表,但您可以在此处看到源代码的旧版本:http://docs.joomla.org/API16:JFilterInput/clean。该函数的最新版本从第 162 行开始:https://github.com/joomla/joomla-cms/blob/master/libraries/joomla/filter/input.php

另请注意,您希望自己从数据数组中提取字段。您实际上可以在没有过滤器设置的情况下向其发送整个数组,并且它至少应该检查整个数组是否存在 XSS 和其他问题。如果您想对整数等进行更细致的过滤,最好逐个字段进行。

$field = JFilterInput::clean($data[$fieldname], 'filter');

将触发通知 "非静态方法 JFilterInput::clean() 不应静态调用"您应该首先使用 JFilterInput::getInstance() 启动它并动态调用它,例如:

$field = JFilterInput::getInstance()->clean($data[$fieldname], 'filter');

汤姆

在解析文件之前,您应该阅读Joomla文档并使用类似的东西:
$string = JRequest::getString( 'description' );
这应该适用于自 1.5 以来的所有版本

有一些 github 项目将 html 净化器实现为插件,我发现了这个,但没有机会测试它,但它应该可以工作。