3 votes

Comment puis-je vérifier si la valeur d'un textarea contient du HTML en utilisant PHP ?

J'utilise actuellement jQuery pour vérifier si la zone de texte contient du HTML : (et je continuerai à l'utiliser).

   if ($('textarea#newMessage').val().match(/<(\w+)((?:\s+\w+(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)\s*(\/?)>/)) {
      $('textarea#newMessage').focus();
      $('#error').html('Error: HTML is not aloud. Please remove all of the HTML in your message to continue.')
      .click(function() { $('#newMessage').focus(); })
      .stop(true,true)
      .fadeIn(800)
      .delay(1500)
      .fadeOut(200);
      return false;
   }

Mais, comment puis-je utiliser PHP pour faire la même chose ? Si quelqu'un désactive JavaScript, il peut facilement soumettre le formulaire contenant du HTML. Existe-t-il un moyen pour PHP de faire la même chose ?

4voto

harpax Points 2635
if ($text != strip_tags($text))
    // text contains html

voir strip_tags

2voto

Herbert Points 3316

Cela permettra d'attraper les balises mais pas le texte.

$textareaname = (isset($_POST['textareaname']))
                ? $_POST['textareaname']
                : '';

if ($textareaname !== strip_tags($_POST['textareaname']))
{
    // contains tags
}

elseif (trim($textareaname ) === '')
{
    // textarea is empty
}

else
{
    // OK! do something
}

Notes :

  1. Si le formulaire est envoyé sans rien dans la zone de texte, $_POST['textareaname'] n'existera pas et PHP lancera une erreur lorsque vous vous essayez de l'utiliser.
  2. Si quelqu'un n'envoie que des espaces trim() l'attrapera.

1voto

Kakashi Points 1317

Essayez ça :

if(preg_match("/<[^>]*>/", $_POST['textareaname'])){
   //contains html tags
} else {
   //dosomething...
}

1voto

str Points 2352

Utilisez preg_match() avec l'expression régulière que vous avez déjà obtenue. Et d'ailleurs : Au lieu de "à haute voix", vous voulez probablement dire "autorisé" ;)

1voto

RiaD Points 15744

Tout d'abord, vous pouvez utiliser exactement la même regexp via preg_match

En outre, vous souhaitez restreindre le HTML pour éviter de modifier quoi que ce soit dans la structure de votre code.
Ainsi, vous pouvez simplement utiliser htmlspecialchars pour imprimer le HTML en texte brut.
Mais si vous avez vraiment besoin de vérifier s'ils existent, vous pouvez simplement vérifier les symboles. < y > qui peut vous casser le balisage par preg_match('~[<>]~',..) ou simplement pour strpos 'es

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X