it-swarm.com.de

Welche Zeichen sind als Shortcode-Tag zulässig und wie sollten sie bereinigt werden?

Ich arbeite an einem Plugin, in dem der Benutzer selbst Shortcode-Tags definieren kann. Was würden Sie vorschlagen, um dort einzulassen? Mein Gedanke ist, nur ASCII-Zeichen zuzulassen.

Wie desinfiziere ich? strip_tags und dann regex um nur a-z, 0-9 zuzulassen oder gibt es eine bessere lösung? Hat WordPress einen Filter dafür? Könnte ich vielleicht den Filter verwenden, den WordPress für Schnecken verwendet?

danke für die antworten ich mache das einfach, wenn es sowieso einen ascii char geben muss, dann brauche ich nur drei.

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
5
amy

Sie können fast jeden Charakter verwenden. Nur das Zeichen / ist gefährlich. Lass es nicht zu. WordPress verwendet preg_quote , um den Shortcode-Namen zu umgehen, enthält dabei jedoch keinen eigenen Regex-Begrenzer /. Daher wird der Shortcode nicht ordnungsgemäß maskiert und Sie erhalten eine PHP -Warnung.

Außerdem gibt es nur zwei Grundregeln für einen Kurzwahlnamen:

  1. Es sollte mindestens zwei Zeichen lang sein.
  2. Es sollte mindestens ein US-ASCII-Zeichen (a-z0-9) enthalten.

Das funktioniert also:

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>';
}
1
fuxia

Es scheint, dass WordPress einige Probleme mit Shortcodes mit Bindestrichen hat, also möchten Sie das wahrscheinlich vermeiden. Unsicher, ob dies immer noch ein Problem mit WP 3.3.x ist.

Die meisten Funktionen zur Bereinigung in der Datei wp-includes/formatting.php von WP (wie sanitize_title) funktionieren ähnlich wie die, die Sie möglicherweise benötigen, lassen jedoch Bindestriche zu. Wenn Sie nur alphanumerische Zeichen und keine Bindestriche zurückgeben möchten, ist es wahrscheinlich besser, eine Funktion zu schreiben, die eine Zeichenfolge akzeptiert, preg_replace zum Entfernen von Leerzeichen verwendet und nur alphanumerische Zeichen verwendet. Sie können die Leerzeichen durch Unterstriche ersetzen, da es nicht so aussieht, als ob die Shortcode-API Probleme mit denen in Shortcode-Tags hat.

3
Jeremy