从选项页面中的文本区域到前端要执行的操作

时间:2013-02-23 作者:James Mitch

我在插件页面上有一个文本区域,用于小的css增强,我将它们直接输出到头部。我的问题是如何清理CSS

我为选项注册了验证函数register_setting. 立即在设置页上$output[\'css\'] = (string) $input[\'css\']; 这就是我正在做的一切。我是否应该逃避它?word与它有什么关系?对于数据库,它本身是否有一些转义?我可以在这里进行一些邪恶的注射。

对于输出,我使用esc_attr() 到目前为止,它工作得很好,但我只是想问一下,是否有更好的东西。我刚测试过" 它们显然被翻译成的字符" 我刚刚测试过,他们似乎没有破坏firefox中的CSS,但这感觉很糟糕。那么我应该用什么来代替呢?

echo \'<style type="text/css" media="screen">\' . esc_attr( $css ) . \'</style>\';
顺便说一句,我不在乎" 你只需要在CSS中使用它们,或者我错了,你可以使用url(“bla”)或url(bla),两者都可以。还是有支持的理由"CSS中的s?

更新1:在回答了两个问题后,如果我经常说话和思考,我仍然想知道我的思维过程是否错得太多,现在在数据库输入上使用wp\\u filter\\u nohtml\\u kses()跳过它两次and on output. 我很乐意从具有安全专业知识的人那里得到答案。

更新2:我注意到wp\\u filter\\u nohtml\\u kses()不允许>< 因为它们是CSS选择器,也许它毕竟不是正确的过滤器。可能是其他我想要在CSS中过滤的东西?

2 个回复
SO网友:s1lv3r

我看到的大多数插件实际上都不关心这一点。他们只是相信能够编辑选项页面的人是可以信任的。

您可以使用一个现有的php类进行css优化,因为它们在解析css时也会清理css。

CSS中需要使用单引号或双引号(“/”)来表示值中包含空格的情况。当然,图像路径通常不会出现这种情况,但带有空格的字体名称非常常见。然后,您需要使用引号来这样写:

font-family:"Times New Roman",Georgia,serif;
我刚刚看到stackexchange上有一个类似的问题,它有一个很好的例子,可以使用HTMLPurifier+CSSTidy的工作代码。你可以看看here.

SO网友:Mark Kaplun

不应以这种方式使用esc\\u attr。它只能用于转义HTML标记中的属性。

至于CSS,这取决于目标用户是谁。如果您是为一个只有管理员才能编辑CSS的独立站点执行此操作,则无需进行清理。但如果计划在网络中使用,则需要使用wp_filter_nohtml_kses 函数从CSS中过滤出所有HTML。你可以

echo \'<style type="text/css" media="screen">\' . wp_filter_nohtml_kses( $css ) . \'</style>\';
但在将值存储到DB之前进行清理更有效。

结束

相关推荐

将一个css类添加到分类固定链接

我需要在每个<a> 元素检索者the_terms() (或类似函数),以便在fancybox模式窗口中打开分类permalink。我整个下午都在寻找一个可以处理它的过滤器,但没有成功。无论如何,我得到了下面这个(糟糕的)解决方案:$cities = get_the_terms($post->ID, \'cities\'); foreach ($cities as $city) { echo \'<