我应该在哪里添加必要的代码,以便向KSE Allowed标记数组添加额外的属性?

时间:2011-07-28 作者:Andrew Stacey

在尝试在一个新的SE博客上发表文章时,我遇到了以下问题。我被列为作家,这意味着我的能力有些有限。特别是,我不允许发布任意的HTML,而是首先通过kses解析器发送我的条目。总的来说,这似乎是一件好事(我不想对HTML负责!)但它干扰了降价处理器的一部分:引号。我不会写:

> this is a quote
因为> 被kses例程转义。现在,修改kses代码以允许其通过是一件棘手的事情,而且是错误的解决方案(因为它会使kses 语法分析器与降价语法过于紧密;实际上,正确的解决方案是在数据被处理后验证数据,但不要紧。这不是什么大问题,因为我当然可以使用<blockquote>...</blockquote> 直接标记。只有这样才能关闭其中的降价处理器。由于我们使用的是PHPMarkdownExtra(至少,测试似乎表明我们是这样),所以我可以使用markdown="1" fake属性在blockquote内启用降价。但这被kses删除,因为它不在批准的属性列表中!

但是,添加markdown 添加到已批准的属性列表似乎比添加对> quote 语法;特别是有一个数组$allowedposttags 它保存了这些信息,因此意味着只需以明显的方式更改该数组。

但是,这是一个问题,在哪里进行修改是正确的?显然,修改kses.php 是最后的手段。我的猜测是markdown.php 文件进行此修改(因为该文件知道将要使用Markdown)。但如果我不想改变任何可能被上游改变的东西,我应该把所需的改变放在哪里?

(当我在上面说“我”时,我实际上并不是指“我”,因为我想在SE博客上改变这一点;所以请用Rebecca Chernoff能理解的语言解释!)

1 个回复
SO网友:kaiser

具体来说,有一个常数CUSTOM_TAGS 这允许定义$allowedposttags, $allowedtags, $allowedentitynames.

然后您可以简单地设置CUSTOM_TAGS 在包含KSE之前钩住的函数中,为true并定义globals。

第一个可用的钩子触发一个定义$allowedposttags 会是muplugins_loaded, 但我不知道kses是在它之前还是之后加载的

// Set custom tags to override $allowedposttags, $allowedtags, $allowedentitynames
if ( ! defined( \'CUSTOM_TAGS\' ) )
    define( \'CUSTOM_TAGS\', true );
你还得到了wp_kses_hook() 包含自解释筛选器的:

apply_filters(\'pre_kses\', $string, $allowed_html, $allowed_protocols);

结束