允许哪些字符作为短码标记?应该如何清理它们?

时间:2012-05-23 作者:amy

我正在开发一个插件,用户可以自己定义短代码标签。你建议在那里允许什么?我的想法是只允许ascii字符。

那么我该如何消毒呢?strip_tags 然后regex只允许a-z, 0-9 还是有更好的解决方案?WordPress有过滤器吗?我可以用WordPress用来过滤鼻涕虫的过滤器吗?

谢谢你的回答,我会这样做,如果必须有一个ascii字符,那么我只需要三个。

foreach ( $shortcodes as $key => $var ) {

$var = preg_replace(\'/[^a-z0-9_]/\', \'\', $var ); // strip away everything except a-z,0-9 underscore

if ( strlen($var) < 3 )
    continue; // if less then 3 chars AFTER the strip don\'t save

2 个回复
最合适的回答,由SO网友:fuxia 整理而成

几乎可以使用每个字符。只是角色/ 是危险的。不允许这样做。WordPress正在使用preg_quote 转义短代码名称,但它不包含自己的regex分隔符/ 这样做的时候。因此,短代码将无法正确转义,您将收到一条PHP警告。

除此之外,短代码名称只有两个基本规则:

至少两个字符长a-z0-9).

foreach ( array ( \'.-o\', \']b\', \'äoß\', \'o"o\', "o\'o", \'❤m\' ) as $shortcode )
{
    add_shortcode( $shortcode, \'t5_crazy_shortcode_handler\' );
}

function t5_crazy_shortcode_handler( $attrs = array(), $content = NULL, $shortcode )
{
    return "<pre>\\$shortcode: $shortcode\\n\\n\\$attrs\\n"
        . htmlspecialchars( print_r( $attrs, TRUE ) )
        . "\\n\\n\\$content"
        . htmlspecialchars( print_r( $content, TRUE ) )
        . \'</pre>\';
}

SO网友:Jeremy

WordPress似乎some issues with shortcodes tags that have hyphens, 所以你可能想避免这种情况。不确定这是否仍然是WP 3.3的问题。十、

WP中的大多数“消毒”功能wp-includes/formatting.php 文件(如sanitize_title) 工作方式与您可能需要的类似,但它们允许连字符。如果只想返回字母数字,而不想返回连字符,那么最好编写一个函数,该函数采用字符串,使用preg\\u replace删除空格,并且只执行字母数字。您可以用下划线替换空格,因为短代码API似乎与短代码标记中的空格没有问题。

结束