web-dev-qa-db-fra.com

wp_specialchars et wp_specialchars_decode dans un plugin shortcode

J'ai écrit mon premier plugin, un plugin shortcode. J'ai lu sur wp_specialchars et wp_specialchars_decode mais je ne sais pas comment les utiliser.

Le plugin lit un shortcode autorisant certains paramètres et insère un script dans la page code HTML. Par exemple, [MYSHORTCODE TITLE="a short title"] génère les lignes de code de script suivantes:

$html ="<script type=\"text/javascript\">\n"
$html.="var text=\"" . $par['title'] . "\";\n"

Je ne sais pas si je dois écrire ici:

$html.="var text=\"" . wp_specialchars_decode($par['title']) . "\";\n"

ou

$html.="var text=\"" . wp_specialchars($par['title']) . "\";\n"

ou ni l'un ni l'autre.

2
Toc

La description du Codex de ces deux fonctions:

wp_specialchars: convertit un nombre de caractères spéciaux en entités HTML. Traite spécifiquement avec: &, <,>, "et '.

wp_specialchars_decode: convertit un certain nombre d'entités HTML en leurs caractères spéciaux.

Selon

http://codex.wordpress.org/Function_Reference/wp_specialchars

Cette fonction est obsolète à partir de WordPress 2.8.0. Merci d'utiliser esc_html à la place.

Vous ne voulez pas avoir de caractères spéciaux dans votre sortie html, vous préférez donc ne pas utiliser wp_specialchars_decode pour cela.

Il y a une fonction spéciale appelée esc_js() que vous devriez considérer

http://codex.wordpress.org/Function_Reference/esc_js

Le code source de cette fonction peut être trouvé ici:

http://core.trac.wordpress.org/browser/tags/3.5.1/wp-includes/formatting.php#L2641

/**
2641     * Escape single quotes, htmlspecialchar " < > &, and fix line endings.
2642     *
2643     * Escapes text strings for echoing in JS. It is intended to be used for inline JS
2644     * (in a tag attribute, for example onclick="..."). Note that the strings have to
2645     * be in single quotes. The filter 'js_escape' is also applied here.
2646     *
2647     * @since 2.8.0
2648     *
2649     * @param string $text The text to be escaped.
2650     * @return string Escaped text.
2651     */
2652    function esc_js( $text ) {
2653            $safe_text = wp_check_invalid_utf8( $text );
2654            $safe_text = _wp_specialchars( $safe_text, ENT_COMPAT );
2655            $safe_text = preg_replace( '/&#(x)?0*(?(1)27|39);?/i', "'", stripslashes( $safe_text ) );
2656            $safe_text = str_replace( "\r", '', $safe_text );
2657            $safe_text = str_replace( "\n", '\\n', addslashes( $safe_text ) );
2658            return apply_filters( 'js_escape', $safe_text, $text );
2659    }

Voici un bon aperçu de la validation des données:

http://codex.wordpress.org/Data_Validation

1
birgire