web-dev-qa-db-fra.com

Wp_new_comment attend-il un commentaire en HTML?

Le comment_content dans cet exemple doit-il contenir HTML? Ou devrait-il contenir du texte brut?

$comment_id = wp_new_comment([
    'comment_post_ID' => 1,
    'comment_content' => 'Tom & Jerry', // or should this be 'Tom & Jerry'?
    'comment_type' => '',
    'user_id' => 1,
    // etc
]);

Par souci d'exhaustivité, la même chose s'applique-t-elle à wp_insert_comment?

2
Flimm

ou est-ce que ce devrait être 'Tom & Jerry'?

Cela n'a pas vraiment d'importance. Il est plus important de considérer si vous ne savez pas d'où vient le contenu du commentaire. Si vous insérez une entrée utilisateur dans le contenu du commentaire, vous devez l'échapper.

wp_new_comment() s'échappe et désinfecte le commentaire pour vous. Il est conçu pour extraire directement la saisie de l'utilisateur du formulaire de commentaire et le désinfecter avant de le transmettre à wp_insert_comment().

Cela inclut donc le codage des entités HTML (conversion de & en &) et le filtrage du HTML non autorisé. Cela permet également d'ajouter l'adresse IP du commentateur au commentaire.

Ainsi, lorsque vous utilisez wp_new_comment(), vous ne devriez pas avoir besoin de vous échapper et vous devez entrer le commentaire de la même manière que l'utilisateur, à une exception importante près.

wp_new_comment() et wp_insert_comment() s'attendent tous deux à ce que les données soientslashed. WordPress exécute automatiquement addslashes() sur tout ce qui est dans $_POST, $_GET et $_REQUEST et ces fonctions s’attendent à ce que les données soient réduites parce qu’elles sont amenées à utiliser les données de ces variables.

Ainsi, si l'une des données du commentaire que vous insérez inclut des guillemets ou des barres obliques, vous devez la réduire avec wp_slash() avant d'insérer:

$args = [
    'comment_post_ID' => 1,
    'comment_content' => 'Tom\'s a cat',
    'comment_type' => '',
    'user_id' => 1,
];

$comment_id = wp_new_comment( wp_slash( $args ) );

Notez que la barre oblique que j’ai déjà ajoutée, Tom\'s l’a échappé à des fins PHP, et doit encore être réduite.

La chose stupide est que la première chose qui se passe dans wp_insert_comment() est qu’il exécute wp_unslash(). Nous ajoutons donc des barres obliques juste pour leur suppression immédiate. Mais cela doit être fait pour assurer la cohérence avec la variable $_POST et pour que les barres obliques pouvant faire partie du contenu ne soient pas supprimées de manière incorrecte.

1
Jacob Peattie