4 votes

Utilisation de PHP pour supprimer un élément html d'une chaîne de caractères

Je n'arrive pas à comprendre comment faire, j'ai une chaîne qui ressemble à quelque chose comme ça...

    $text = "<p>This is some example text This is some example text This is some example text</p>
             <p><em>This is some example text This is some example text This is some example text</em></p>
             <p>This is some example text This is some example text This is some example text</p>";

Je souhaite utiliser quelque chose comme preg_repalce et regex pour supprimer les éléments suivants

<em>This is some example text This is some example text This is some example text</em>

Je dois donc écrire un code PHP qui recherchera l'ouverture <em> et la fermeture </em> et supprimer tout le texte entre les deux

J'espère que quelqu'un pourra m'aider, Je vous remercie.

4voto

arychj Points 692
$text = preg_replace('/([\s\S]*)(<em>)([\s\S]*)(</em>)([\s\S]*)/', '$1$5', $text);

2voto

Kalle H. Väravas Points 1914
$text = '<p>This is some example text This is some example text This is some example text</p>
<p><em>This is the em text</em></p>
<p>This is some example text This is some example text This is some example text</p>';

preg_match("#<em>(.+?)</em>#", $text, $output);

echo $output[0]; // This will output it with em style
echo '<br /><br />';
echo $output[1]; // This will output only the text between the em

[ Voir le résultat ]

Pour que cet exemple fonctionne, j'ai modifié l'élément <em></em> sinon tout votre texte est identique et vous ne pouvez pas vraiment comprendre si le script fonctionne.

Toutefois, si vous souhaitez vous débarrasser de la <em> et non pour en obtenir le contenu :

$text = '<p>This is some example text This is some example text This is some example text</p>
<p><em>This is the em text</em></p>
<p>This is some example text This is some example text This is some example text</p>';

echo preg_replace("/<em>(.+)<\/em>/", "", $text);

[ Voir le résultat ]

2voto

Nertim Points 315

Si vous êtes intéressé par une solution non-regex, voici ce qu'il en est :

<?php
    $text = "<p>This is some example text This is some example text This is some example text</p>
             <p><em>This is some example text This is some example text This is some example text</em></p>
             <p>This is some example text This is some example text This is some example text</p>";

    $emStartPos = strpos($text,"<em>");
    $emEndPos = strpos($text,"</em>");

    if ($emStartPos && $emEndPos) {
        $emEndPos += 5; //remove <em> tag aswell
        $len = $emEndPos - $emStartPos;

        $text = substr_replace($text, '', $emStartPos, $len);
    }

?>

Cette opération permet de supprimer tout le contenu situé entre les deux étiquettes.

1voto

marko Points 1986

Utilisez strrpos pour trouver le premier élément et puis le dernier élément. Utiliser substr pour obtenir la partie de la chaîne. Puis remplacez la sous-chaîne par la chaîne vide de la chaîne originale.

-4voto

  format: $text = str_replace('<em>','',$text);
$text = str_replace('</em>','',$text);

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