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 [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 107
    Par défaut preg_replace
    Bonjour,

    Je rencontre une erreur peu explicite :
    Notice: Undefined offset: 1 in P:\BOULOT\WEB\****\_****_scripts\functions\htm_create.php on line 28

    Les deux versions du code remanié ci-dessous ont pour objectif de ne prendre qu'une partie d'un contenu posté via un formulaire.

    La 1ère méthode choppe le contenu en entier et supprime ce qu'il y a avant et après en trop, et la 2e méthode ne prend que ce qui est entre les deux.[/B]

    1er ESSAI :
    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
    // On nettoie le code de turobolister
    	$pattern1 = '#<TABLE CELLSPACING="28" CELLPADDING="0" WIDTH="100%"><TR><TD VALIGN="top"><DIV align=center>
    <P><IMG src="http://www.****.com/img/blank1.gif"><BR><IMG src="http://www.****.com/img/logo****.gif"> </P>
    <P><IMG src="http://www.****.com/img/blank2.gif"><BR></P></DIV>#';
    	$pattern2 = '#<P>&nbsp;</P>
    <DIV align=center>
    <DIV align=center><FONT face=Georgia size=4><FONT size=4>
    <DIV align=center></DIV></FONT></FONT></DIV></DIV></DIV></TD></TR></TBODY></TABLE>
    <P>&nbsp;</P>
    <P align=center><FONT face=Georgia>Pensez à visiter <A href="http://stores.shop.ebay.fr/****" target=_blank><B>nos autres objets en vente</B></A></FONT> <FONT face=Georgia>!</FONT><BR><BR><FONT face=Georgia>Ajoutez-nous à <A href="http://my.ebay.fr/ws/eBayISAPI.dll?AcceptSavedSeller&amp;mode=0&amp;preference=0&amp;sellerid=****&amp;ru=http%3A//cgi.ebay.fr/ws/eBayISAPI.dll?ViewItem&amp;item=110159416135&amp;ssPageName=STRK:MEFS:ADDVI" target=_blank><B>vos vendeurs favoris </B></A></FONT><FONT face=Georgia>!</FONT></P>
    <P align=center><IMG src="http://www.****.com/img/blank3.gif"></P>
    <P align=center><IMG src="http://www.****.com/img/powerseller-platine.jpg"></P>
    </TD></TR><TR><TD VALIGN="top" ALIGN="center"></TD></TR></TABLE>#';
    	$turbolister = preg_replace($pattern1, "", $turbolister);
    	$turbolister = preg_replace($pattern2, "", $turbolister);

    2e ESSAI :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    // On prend la partie nécessaire dans le code de turobolister
    	$start = '<P><IMG src="http://www.****.com/img/blank2.gif"><BR></P></DIV>';
    	$end = '<P>&nbsp;</P>
    <DIV align=center>';
    	$pattern = '#' . $start . '(.)' . $end . '#sU';
    	preg_match_all($pattern, $turbolister, $match, PREG_SET_ORDER);
    	$turbolister = $match[1];

    Voilà, ces deux manières foirent.

    Autant le 2e essai comporte une parenthèse capturante et j'ai donc moyen de me planter, autant le 1er essai est simple, la $pattern1 est bien supprimée, mais pas la 2e.

    edit :

    Solution donnée plus bas : nettoyer les $pattern avec preg_quote().

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    La signification de l'erreur est simple : L'index 1 n'existe pas dans ton tableau $match (donc ton preg_match n'a rien recuperé.

    Pour te répondre sur le pourquoi, il faudrait connaitre le contenu de $turbolister.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 107
    Par défaut
    Non ça va pas être possible.
    En plus si je copie le code, le seul truc qui intéressera c'est les parties concernant les pattern, sauf que j'ai copié/collé y'a aucun doute.

    Le seul truc à savoir, c'est que :
    - les $pattern sont adéquates
    - aucune histoire d'espaces ou de tabulations en trop (je dis bien aucune).
    - les $apattern sont bien présentes dans le code analysé, exactement sous la même forme.

    edit :
    La signification de l'erreur est simple : L'index 1 n'existe pas dans ton tableau $match
    Oui mais çà leur couterait de dire que c'est à cause d'une pattern déffectueuse, d'une patterne qui n'est pas trouvé, de ceci ou de celà.

  4. #4
    Membre Expert
    Avatar de Eric2a
    Homme Profil pro
    Technicien
    Inscrit en
    Septembre 2005
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 225
    Par défaut
    Salut,

    Essaie d'utiliser la fonction preg_quote pour proteger les caractères spéciaux (utilisés par le moteur d'expressions rationnelles).
    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
    $pattern1 = preg_quote('#'.
    '<TABLE CELLSPACING="28" CELLPADDING="0" WIDTH="100%"><TR><TD VALIGN="top"><DIV align=center>
    <P><IMG src="http://www.****.com/img/blank1.gif"><BR><IMG src="http://www.****.com/img/logo****.gif"> </P>
    <P><IMG src="http://www.****.com/img/blank2.gif"><BR></P></DIV>'.
    '#i','#'
    );
     
    $pattern2 = preg_quote('#'.
    '<P>&nbsp;</P>
    <DIV align=center>
    <DIV align=center><FONT face=Georgia size=4><FONT size=4>
    <DIV align=center></DIV></FONT></FONT></DIV></DIV></DIV></TD></TR></TBODY></TABLE>
    <P>&nbsp;</P>
    <P align=center><FONT face=Georgia>Pensez à visiter <A href="http://stores.shop.ebay.fr/****" target=_blank><B>nos autres objets en vente</B></A></FONT> <FONT face=Georgia>!</FONT><BR><BR><FONT face=Georgia>Ajoutez-nous à <A href="http://my.ebay.fr/ws/eBayISAPI.dll?AcceptSavedSeller&amp;mode=0&amp;preference=0&amp;sellerid=****&amp;ru=http%3A//cgi.ebay.fr/ws/eBayISAPI.dll?ViewItem&amp;item=110159416135&amp;ssPageName=STRK:MEFS:ADDVI" target=_blank><B>vos vendeurs favoris </B></A></FONT><FONT face=Georgia>!</FONT></P>
    <P align=center><IMG src="http://www.****.com/img/blank3.gif"></P>
    <P align=center><IMG src="http://www.****.com/img/powerseller-platine.jpg"></P>
    </TD></TR><TR><TD VALIGN="top" ALIGN="center"></TD></TR></TABLE>'.
    '#i','#'
    );

  5. #5
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Il y a vraiment les étoiles dans ton pattern ou tu l'as modifié pour l'afficher ici ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 107
    Par défaut
    J'ai modifié pour afficher ici
    J'essaie preg_quote et je vous tiens au jus.

  7. #7
    Membre Expert
    Avatar de Eric2a
    Homme Profil pro
    Technicien
    Inscrit en
    Septembre 2005
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 225
    Par défaut
    Je crois que je me suis planté

    J'ai inclus les délimiteurs (#) dans la chaine d'entrée à la fonction preg_quote().

    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
    $pattern1 = '#'.preg_quote(
    '<TABLE CELLSPACING="28" CELLPADDING="0" WIDTH="100%"><TR><TD VALIGN="top"><DIV align=center>
    <P><IMG src="http://www.****.com/img/blank1.gif"><BR><IMG src="http://www.****.com/img/logo****.gif"> </P>
    <P><IMG src="http://www.****.com/img/blank2.gif"><BR></P></DIV>'
    ,'#').'#i';
     
    $pattern2 = '#'.preg_quote(
    '<P>&nbsp;</P>
    <DIV align=center>
    <DIV align=center><FONT face=Georgia size=4><FONT size=4>
    <DIV align=center></DIV></FONT></FONT></DIV></DIV></DIV></TD></TR></TBODY></TABLE>
    <P>&nbsp;</P>
    <P align=center><FONT face=Georgia>Pensez à visiter <A href="http://stores.shop.ebay.fr/****" target=_blank><B>nos autres objets en vente</B></A></FONT> <FONT face=Georgia>!</FONT><BR><BR><FONT face=Georgia>Ajoutez-nous à <A href="http://my.ebay.fr/ws/eBayISAPI.dll?AcceptSavedSeller&amp;mode=0&amp;preference=0&amp;sellerid=****&amp;ru=http%3A//cgi.ebay.fr/ws/eBayISAPI.dll?ViewItem&amp;item=110159416135&amp;ssPageName=STRK:MEFS:ADDVI" target=_blank><B>vos vendeurs favoris </B></A></FONT><FONT face=Georgia>!</FONT></P>
    <P align=center><IMG src="http://www.****.com/img/blank3.gif"></P>
    <P align=center><IMG src="http://www.****.com/img/powerseller-platine.jpg"></P>
    </TD></TR><TR><TD VALIGN="top" ALIGN="center"></TD></TR></TABLE>'
    ,'#').'#i';

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 107
    Par défaut
    Ouhlà, n'empêche que tu m'as résolu mon problème avec ton code mal fait

    Là je viens de réessayer avec la version bien écrite, ça fonctionne encore !
    OUF !

    Un GRAAAAAAND merci à toi pour cette solution que je n'aurais jamais pu trouver tout seul.

    Maintenant je pense que je suis blindé : espaces, tabulations, caractères spéciaux à traiter avec preg_quote... bref, si ça me refait le coup de planter mon travail pendant 4h, je pars en vacances aux antipodes

    A+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [RegEx] Remplacer une chaîne avec preg_replace
    Par GregPeck dans le forum Langage
    Réponses: 3
    Dernier message: 08/12/2005, 13h21
  2. [RegEx] preg_replace assez complexe
    Par Info-Rital dans le forum Langage
    Réponses: 2
    Dernier message: 25/11/2005, 14h28
  3. [RegEx] problème avec preg_replace
    Par carlos20 dans le forum Langage
    Réponses: 6
    Dernier message: 27/10/2005, 11h29
  4. [RegEx] Preg_replace et affichage de variable
    Par xperienss dans le forum Langage
    Réponses: 6
    Dernier message: 13/10/2005, 14h26
  5. [RegEx] preg_replace : explications sur les caractères spéciaux
    Par Anduriel dans le forum Langage
    Réponses: 6
    Dernier message: 05/10/2005, 22h35

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