私はユーザーが自分自身でショートコードタグを定義できるプラグインに取り組んでいます。あなたはそこに許可するために何を提案しますか?私の考えはアスキー文字だけを許可することです。
じゃあどうやって消毒するの? strip_tags
に続いてa-z, 0-9
のみを許可するように正規表現しますか、それとももっと良い解決策がありますか? WordPressにはそれに対するフィルタがありますか? WordPressがナメクジのために使用するフィルタを使用できますか?
とにかく1つのASCII文字がなければならない場合は私はちょうど3を必要とする場合、私はこれをやるでしょう答えのおかげで。
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
ほとんどすべての文字を使用できます。 /
という文字だけが危険です。許可しないでください。 WordPressはショートコード名をエスケープするために preg_quote
を使用していますが、それを行う際に独自の正規表現区切り文字/
は含まれていません。そのため、ショートコードは適切にエスケープされず、PHP警告が表示されます。
それ以外にも、ショートコード名には2つの基本的な規則があります。
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>';
}
WordPressには ハイフンを含むshortcodesタグに関するいくつかの問題があります なので、おそらくそれを避けたいと思うでしょう。これがまだWP 3.3.xの問題であるかどうかわからない。
WPの wp-includes/format.php ファイルにある 'sanitize'関数のほとんどは(sanitize_title
のように)あなたが必要とするものと同じように動作しますが、それらはハイフンを許可します。ハイフンではなく、英数字のみを返したい場合は、おそらく文字列を取り、スペースを削除するためにpreg_replaceを使用し、英数字のみを実行する関数を書くほうがよいでしょう。 Shortcode APIがshortcodeタグ内の問題を抱えているようには見えないので、スペースをアンダースコアに置き換えることができます。