IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

preg_replace sélectif ?


Sujet :

Langage PHP

  1. #1
    Membre habitué Avatar de tintin72
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    663
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 663
    Points : 177
    Points
    177
    Par défaut preg_replace sélectif ?
    Bonjour,

    Dans un texte j'ai besoin d'insérer une balise img au début d'un
    paragraphe. La difficulté c'est que ça peut être n'importe quel paragraphe, ça dépend.
    Je n'arrive pas à voir comment effectuer le remplacement uniquement
    dans le paragraphe voulu.
    Si je fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    preg_replace('#<p.*>(.*)</p>#Usi', '<img etc... />$1', $text);
    la balise img est bien insérée mais dans tout les paragraphes et ça ne va pas.
    Y a t-il moyen d'être sélectif avec preg_replace ou faut-il utiliser une autre solution ?


    Merci.

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    pour manipuler du HTML c'est DOMDocument

  3. #3
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Citation Envoyé par stealth35 Voir le message
    pour manipuler du HTML c'est DOMDocument
    Tu devrais le mettre dans ta signature vu le nombre de fois que tu le dis

    @tintin72
    Fais un XPath pour trouver les paragraphes que tu veux et utilise la méthode DOMNode::insertBefore.

  4. #4
    Membre habitué Avatar de tintin72
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    663
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 663
    Points : 177
    Points
    177
    Par défaut
    Merci pour vos réponses, c'est en effet DOMDocument qui est
    le mieux adapté à ce que je veux faire.

    Toutefois j'ai un problème. Etant novice avec DOMDocument
    je suis parvenu à un code qui fonctionne.
    Ici la balise img est insérée dans le 2eme paragraphe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $doc = DOMDocument::loadHTML($textHtml);
    $tags = $doc->getElementsByTagName('p');
     
    $paragraphNb = 0;
     
    foreach($tags as $tag)
    {
      if($paragraphNb == 1)
        $tag->nodeValue = $imgTag.$tag->nodeValue;
     
      $paragraphNb++;
    }
    Ce que je ne sais pas c'est comment faire pour que le changement
    effectué dans le paragraphe soit répercuté dans le document
    original $textHtml.

    Merci pour votre aide.

  5. #5
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Utilise DOMDocument::saveHTML (ou saveXML si c'est du XML)

  6. #6
    Membre habitué Avatar de tintin72
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    663
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 663
    Points : 177
    Points
    177
    Par défaut
    C'est ce que j'ai fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $textHtml = $doc->saveHTML();
    mais il me rajoute un doctype au début du document original ainsi que des balises html et body.
    De plus, il transforme les chevrons du tag de l'image en entités html (&lt; &gt.

    Y a t-il des paramètres optionnels à renseigner ?

Discussions similaires

  1. [RegEx] preg_replace assez complexe
    Par Info-Rital dans le forum Langage
    Réponses: 2
    Dernier message: 25/11/2005, 13h28
  2. [RegEx] problème avec preg_replace
    Par carlos20 dans le forum Langage
    Réponses: 6
    Dernier message: 27/10/2005, 10h29
  3. [RegEx] Preg_replace et affichage de variable
    Par xperienss dans le forum Langage
    Réponses: 6
    Dernier message: 13/10/2005, 13h26
  4. [RegEx] preg_replace : explications sur les caractères spéciaux
    Par Anduriel dans le forum Langage
    Réponses: 6
    Dernier message: 05/10/2005, 21h35
  5. [XSL][PHP]Affichage sélectif (xsl:choose)
    Par mamat- dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 29/07/2005, 14h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo