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 :

str_replace poussé


Sujet :

Langage PHP

  1. #21
    Expert confirmé

    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
    Par défaut
    ça va être galère à refaire les marges

  2. #22
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2011
    Messages : 19
    Par défaut
    Citation Envoyé par stealth35 Voir le message
    tien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    $source = <<<HTML
    <img src="xxx" style="width: 200px; height: 150px; float:left" width="100" alt="test" />
    <img src="xxx" style="width: 500px; height: 300px; float:right" width="100" alt="test" />
    HTML;
     
    $doc = new DOMDocument();
     
    $frag = $doc->createDocumentFragment();
    $frag->appendXML($source);
     
    $doc->appendChild($frag);
     
    $images = $doc->getElementsByTagName('img');
     
    foreach($images as $image)
    {
        preg_match_all('/(?P<name>[^:\s]+)\:\s*(?P<value>[^;\s]+);?/', $image->getAttribute('style'), $matches);
     
        $styles = array_combine($matches['name'], $matches['value']);
     
        foreach($styles as $name => $value)
        {
        	if($name === 'float')
        	{
        	    $name = 'align';
        	}
     
            $image->setAttribute($name, $value);
        }
     
        $image->removeAttribute('style');
    }
     
    echo $doc->saveHTML();
    y'a sans doute un truc plus sympa a faire au niveau des replacements (float -> align)
    Euuuuh tu viens juste de m'épater!

    Merci infiniment! :O (à tous, je tiens à le préciser)

  3. #23
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2011
    Messages : 19
    Par défaut
    Citation Envoyé par stealth35 Voir le message
    ça va être galère à refaire les marges
    Non mais de toute manière je vais me débrouiller pour la suite, tu m'as aidé pour le plus dur...

    le clin d’œil à Marge

  4. #24
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 38
    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
    Par défaut
    @stealth

    Tu devrais ajouter un filtre pour éviter de prendre des attributs non-standards:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    // ....
    $styles = array_combine($matches['name'], $matches['value']);
    $styles = array_intersect_key($styles, array_flip(array('width', 'height', 'border', 'float'));

  5. #25
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2011
    Messages : 19
    Par défaut
    Euh en fait j'ai un gros problème là... ça fonctionne très bien sauf que si j'ajoute un " ' " ou un n'importe quel caractère spécial "é" "à" etc, ça ne fonctionne plus!!!! J'ai testé tout mais en fait, ça bloque quand je passe dans l'objet DOM, je vous avoue que je n'ai presque aucune connaissance là dedans. De l'aide !!!

  6. #26
    Expert confirmé

    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
    Par défaut
    Citation Envoyé par aa1807 Voir le message
    Euh en fait j'ai un gros problème là... ça fonctionne très bien sauf que si j'ajoute un " ' " ou un n'importe quel caractère spécial "é" "à" etc, ça ne fonctionne plus!!!! J'ai testé tout mais en fait, ça bloque quand je passe dans l'objet DOM, je vous avoue que je n'ai presque aucune connaissance là dedans. De l'aide !!!
    montre un exemple qui ne fonctionnent pas

  7. #27
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2011
    Messages : 19
    Par défaut
    En fait j'ai le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    echo "CONTENT:".$source."<br>";
    $doc = new DOMDocument();
     
    $frag = $doc->createDocumentFragment();
    $frag->appendXML($source);
     
    $doc->appendChild($frag);
     
    $images = $doc->getElementsByTagName('img');
     
    foreach($images as $image)
    {
    	preg_match_all('/(?P<name>[^:\s]+)\:\s*(?P<value>[^;\s]+);?/', $image->getAttribute('style'), $matches);
    	$styles = array_combine($matches['name'], $matches['value']);
     
    	foreach($styles as $name => $value)
    	{
    		if($name === 'float')
    		{
    			$name = 'align';
    		}
     
    		$image->setAttribute($name, $value);
    	}
     
    	$image->removeAttribute('style');
    }
     
    $content = $doc->saveHTML();
    echo "CONTENT:".$content."<br>";
    Et j'obtient (avec les echos) le résultat suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CONTENT:
     
    dfgdf' ' ééé fgd
     
     
    CONTENT:
    Le deuxième echo est vide!

    Si je mets en commentaire le code de DOMDocument le deuxième echo fonctionne. Même résultat si le texte ne contient aucun " ' " ou caractère spécial.

  8. #28
    Expert confirmé

    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
    Par défaut
    que donne la source HTML

  9. #29
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2011
    Messages : 19
    Par défaut
    Citation Envoyé par stealth35 Voir le message
    que donne la source HTML
    Ca donne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CONTENT:<br><p>
    	ghjgfhj'bvhff"ééééé</p>
    <br><br>CONTENT:<br>
    Sinon en attendant j'utilise les regex ça fonctionne bien comme alternative..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    $pattern = '#(<img .*) (style=".*) width: ([0-9]+)px;(.*/>)#';
    $replace = '$1 width="$3" $2$4';
    $content_final = preg_replace($pattern, $replace, $content_final);
     
    $pattern2 = '#(<img .*) (style=".*) height: ([0-9]+)px;(.*/>)#';
    $replace2 = '$1 height="$3" $2$4';
    $content_final = preg_replace($pattern2, $replace2, $content_final);
     
    $pattern = '#(<img .*) (style=.*)"width: ([0-9]+)px;(.*/>)#';
    $replace = '$1 width="$3" $2"$4';
    $content_final = preg_replace($pattern, $replace, $content_final);
     
    $pattern2 = '#(<img .*) (style=.*)"height: ([0-9]+)px;(.*/>)#';
    $replace2 = '$1 height="$3" $2"$4';
    $content_final = preg_replace($pattern2, $replace2, $content_final);
     
    $pattern3 = '#(<img .*) (style=".*)float: (\w+);(.*/>)#';
    $replace3 = '$1 align="$3" $2$4';
    $content_final = preg_replace($pattern3, $replace3, $content_final);
    2 fois width et height c'est pour éviter les xxxx-width: 000px; et les choses comme ça... c'est pas propre c'est sûre c'est du bidouillage mais ça fonctionne

Discussions similaires

  1. Problème avec str_replace()
    Par vinche999 dans le forum Langage
    Réponses: 6
    Dernier message: 13/02/2006, 10h23
  2. pb str_replace
    Par splouf dans le forum Langage
    Réponses: 4
    Dernier message: 30/01/2006, 19h00
  3. PHP str_replace
    Par carlos20 dans le forum Langage
    Réponses: 14
    Dernier message: 02/12/2005, 16h57
  4. [RegEx] str_replace qui veut pas replacer
    Par lamoufle dans le forum Langage
    Réponses: 5
    Dernier message: 13/09/2005, 13h37

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