Modification attribut alt dans un contenu

Résolu
Signaler
Messages postés
99
Date d'inscription
lundi 8 septembre 2003
Statut
Membre
Dernière intervention
1 septembre 2010
-
Messages postés
99
Date d'inscription
lundi 8 septembre 2003
Statut
Membre
Dernière intervention
1 septembre 2010
-
Bonjour,

Je cale un peu pour un module que j'aimerai développer.

J'ai une variable qui contient du code html:

Exemple:
$content = "
 blabla 
   ";


J'aimerai "traiter" l'attribut alt de toutes les images de la variable.

Si l'attribut alt n'existe pas pour une image, je dois le créer.
Si l'attribut alt existe mais vide alors j'aimerai le remplir d'un texte.
Si l'attribut alt est rempli, on ne fais rien.

J'imagine que l'ont doit utiliser plusieurs expressions régulière mais je ne sais pas comment les faire.

Merci à ceux qui me donneront un petit coup de pouce.

4 réponses

Messages postés
1309
Date d'inscription
samedi 31 janvier 2009
Statut
Membre
Dernière intervention
5 juin 2013
14
Salut,

Si tu as du XHTML et non une soupe de balise alors tu peux utiliser les divers bibliothèques de traitement des documents XML, par exemple SimpleXML, afin de parser le contenu de ta chaîne et te donner des moyens de plus haut niveau pour en manipuler le contenu. Voici par exemple une fonction récursive qui te permet de vérifier chaque élément et qui appel une autre fonction sur les éléments img afin de les traiter comme tu le souhaite :

<?php

function        img_action(SimpleXMLElement &$XmlNode)
{
  foreach ($XmlNode->attributes() as $name => $value)
    {
      if ($name 'alt' && $value '')
        {
          $XmlNode['img'] = 'bidule';
          return ;
        }
      elseif ($name == 'alt')
        return ;
    }
  $XmlNode->addAttribute('alt', 'truc');
}

function        edit_img(SimpleXMLElement $XmlNode)
{
  if (sizeof($XmlNode->children()) <= 0)
    return $XmlNode;
  foreach ($XmlNode->children() as $Child)
    {
      if ($Child->getName() == 'img')
        img_action($Child);
      else
        edit_img($Child);
    }
  return $XmlNode;
}

$str = '                                                                        

                                                                           
  Lorem ipsum dolor sit amet.

       
                                                   
  Sed ut perspiciatis unde omnis iste natus error 

  

';
$DataXml = new SimpleXMLElement($str, null);
$DataXml = edit_img($DataXml);
echo $DataXml->asXML(), "\n";
Messages postés
23
Date d'inscription
samedi 21 novembre 2009
Statut
Membre
Dernière intervention
22 juillet 2010

ou en jquery :
$("img").each( function() { this.attr( { src: "x.jpg", alt: "x texte" } ) } )

En une seule ligne ^^ merci Jquery

Pour l'explication :
// on boucle sur toutes les balise img
$("img").each
// en se basant sur l'attribut ..
this.attr( )
//... sur l'attribut src (nom l'image en faite) on modifie l'attribut alt.
{ src: "x.jpg", alt: "x_texte" }

voila a toi d'adapter x.jpg et x_texte avec un tableau
Exemple :
image = new Array();
image['toto.jpg'] = 'Toto a la plage';
image['tarzan.jpg'] = 'Tarzan et chita ^^';

// peut être a revoir cette partie
$("img").each( function() { this.attr( { src: "x.jpg", alt: image[this.attr("src")] } ) } )
Messages postés
1309
Date d'inscription
samedi 31 janvier 2009
Statut
Membre
Dernière intervention
5 juin 2013
14
Salut,

@cyrhades : Je ne crois pas qu'agir sur le DOM soit la bonne solution. Déjà parce que tout le monde n'a pas JavaScript d'activé (bon ok de nos jours ce n'est presque plus le cas), mais surtout parce que le principe même de fournir un document erroné avec un correctif a appliquer me semble assez malsain.
Messages postés
99
Date d'inscription
lundi 8 septembre 2003
Statut
Membre
Dernière intervention
1 septembre 2010

Sympa le code javascript mais je devait intégrer ca dans un module en php.

Un grand merci à vous 2