php htmlpurifier,php – HtmlPurifier – 允许数据属性

我试图在我的所有范围内允许使用htmlPurifier的一些数据属性但是没办法…

我有这个字符串:

My

Name

Is

Zooboo

我的htmlpurifier配置:

$this->HTMLpurifierConfigInverseTransform = \HTMLPurifier_Config::createDefault();

$this->HTMLpurifierConfigInverseTransform->set('HTML.Allowed', 'span,u,strong,em');

$this->HTMLpurifierConfigInverseTransform->set('HTML.ForbiddenElements', 'word,p');

$this->HTMLpurifierConfigInverseTransform->set('CSS.AllowedProperties', 'font-weight, font-style, text-decoration');

$this->HTMLpurifierConfigInverseTransform->set('AutoFormat.RemoveEmpty', true);

我这样净化我的$value:

$purifier = new \HTMLPurifier($this->HTMLpurifierConfigInverseTransform);

var_dump($purifier->purify($value));die;

得到这个:

My NameIs Zoobo

但是如何在我的跨度中保存我的数据属性id,data-time-start,data-time-end?

我需要这个:

My NameIs Zoobo

我试着用这个配置测试:

$this->HTMLpurifierConfigInverseTransform->set('HTML.Allowed', 'span[data-time-start],u,strong,em');

但错误信息:

User Warning: Attribute ‘data-time-start’ in element ‘span’ not

supported (for information on implementing this, see the support

forums)

谢谢你的帮助 !!

编辑1

我尝试在这个代码行的firdt时间允许ID:

$this->HTMLpurifierConfigInverseTransform->set('Attr.EnableID', true);

它对我不起作用……

编辑2

对于data- *属性,我添加了这一行但是没有发生任何事情……

$def = $this->HTMLpurifierConfigInverseTransform->getHTMLDefinition(true);

$def->addAttribute('sub', 'data-time-start', 'CDATA');

$def->addAttribute('sub', 'data-time-end', 'CDATA');

解决方法:

HTML Purifier了解HTML的结构,并将此知识用作其白名单过程的基础.如果您将标准属性添加到白名单,它不允许该属性的任意内容 – 它理解该属性并仍将拒绝无意义的内容.

例如,如果某个属性采用了数值,HTML Purifier仍会拒绝尝试为该属性输入值’foo’的HTML.

如果添加自定义属性,只需将其添加到白名单中并不能教会HTML Purifier如何处理属性:它们可以在这些属性中获得哪些数据?什么数据是恶意的?

有大量文档,您可以在此处告诉HTML Purifier有关自定义属性的结构:Customize

< a> -tag的’target’属性有一个代码示例:

$config = HTMLPurifier_Config::createDefault();

$config->set('HTML.DefinitionID', 'enduser-customize.html tutorial');

$config->set('HTML.DefinitionRev', 1);

$config->set('Cache.DefinitionImpl', null); // remove this later!

$def = $config->getHTMLDefinition(true);

$def->addAttribute('a', 'target', 'Enum#_blank,_self,_target,_top');

这会将target添加为仅接受值“_blank”,“_ self”,“_ target”和“_top”的字段.这比实际的HTML定义要严格得多,但对于大多数用途来说完全足够了.

这是数据时间开始和数据时间结束所需的一般方法.有关可能的配置,请查看官方HTML Purifier文档(如上所述).从你的例子中我最好的猜测是你不想要Enum#…但是数字,就像这样……

$def->addAttribute('span', 'data-time-start', 'Number');

$def->addAttribute('span', 'data-time-end', 'Number');

…但请检查一下,看看哪种用例最适合您的用例. (当您实现此功能时,请不要忘记您还需要在当前正在执行的白名单中列出属性.)

我希望有所帮助!

标签:htmlpurifier,php,filter

来源: https://codeday.me/bug/20191008/1870340.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ACL(Access Control List,访问控制列表)是一种常见的权限控制方法,可以对用户、角色或资源进行权限控制,从而保证系统的安全性和可靠性。 在 PHP 中,可以通过使用 ACL 库来实现权限控制。ACL 库提供了一组 API,可以方便地实现用户、角色和资源的权限管理。 使用 ACL 库的基本步骤如下: 1. 创建 ACL 对象,用于管理权限控制列表。 2. 创建用户、角色和资源对象,分别用于表示系统中的用户、角色和资源。 3. 将用户、角色和资源对象添加到 ACL 对象中。 4. 定义权限规则,例如“用户 A 可以访问资源 B”。 5. 将权限规则添加到 ACL 对象中。 6. 在代码中使用 ACL 对象来判断用户是否具有访问资源的权限。 下面是一个简单的 PHP ACL 示例代码: ```php // 创建 ACL 对象 $acl = new \Zend\Permissions\Acl\Acl(); // 创建用户、角色和资源对象 $user = new \Zend\Permissions\Acl\Role\GenericRole('user'); $admin = new \Zend\Permissions\Acl\Role\GenericRole('admin'); $resource = new \Zend\Permissions\Acl\Resource\GenericResource('resource'); // 将用户、角色和资源对象添加到 ACL 对象中 $acl->addRole($user); $acl->addRole($admin, $user); $acl->addResource($resource); // 定义权限规则 $acl->allow($user, $resource, 'read'); $acl->allow($admin, $resource, 'write'); // 判断用户是否具有访问资源的权限 $isAllowed = $acl->isAllowed('admin', 'resource', 'write'); ``` 在上面的代码中,我们创建了一个 ACL 对象,并添加了一个用户对象、一个管理员对象和一个资源对象。然后,我们定义了两条权限规则,表示用户可以读取资源,管理员可以写入资源。最后,我们使用 ACL 对象来判断管理员是否具有写入资源的权限。 需要注意的是,ACL 库提供了丰富的功能和选项,可以根据具体的需求进行配置和调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值