Stripslashes sur certaines lignes uniquement

Résolu
Kommius Messages postés 3 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 7 septembre 2009 - 17 août 2009 à 15:44
Kommius Messages postés 3 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 7 septembre 2009 - 7 sept. 2009 à 19:44
Bonjour à tous, :mrgreen:

Je cherche à faire un script relativement simple.

Il s'agit d'aller extraire le contenu d'un fichier, et faire un
stripslashes
sur toutes les lignes contenant un
echo "";
.

Pour le moment, voici le bout de code que j'ai réussi à pondre :


[php]$file_contents = file_get_contents($fichier);

if(preg_match_all('`^echo"(.*?)"', $file_contents, $matches)){

foreach ($matches as $val) {
$processed .= stripslashes($val);
}
} else {
$processed .= $file_contents; //-- Que dois-je mettre ici si le match ne correspond pas?
}

file_put_contents($fichier, $processed);
/php

Suis-je sur la bonne piste? Quelqu'un peut-il m'orienter dans la bonne direction s.v.p? Merci à vous!! :)

2 réponses

neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
21 août 2009 à 14:58
Salut,

Tu devrais jeter un oeil à cette fonction tout à fait intéressante qu'est preg_replace_callback(). Ton expression régulière est correcte (et puis d'ailleurs tu sais mieux que moi si elle l'est ou pas, puisque tu ne donnes pas d'exemple de fichier lu), il te reste à la mettre dans preg_replace_callback et tu feras ton remplacement en une seule ligne.
Cette fonction t'évitera d'ailleurs de te poser la question si pour une ligne la correspondance n'est pas trouvée : parce que comme tu ne parcours que les lignes qui correspondent, les autres sont purement et simplement passées à la trappe... Exemple :

function my_strip($input) {
return stripslashes($input[1]);
}

$processed = preg_replace_callback('`^echo(?:\s)"([^"]*)"`m', 'my_strip', file_get_contents($fichier));

J'ai modifié un peu l'expression régulière : on autorise des espaces entre echo et le premier guillemet double, et entre les guillemets, on accepte tous les caractères qui ne sont pas des guillemets doubles. Et l'option m permet de considérer le fichier sur plusieurs lignes, pour rendre valable l'assertion de début de ligne (le caractère ^)
3
Kommius Messages postés 3 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 7 septembre 2009
7 sept. 2009 à 19:44
Merci beaucoup pour l'aide!!

Au cas ou cela pourrait servir à quelqu'un, je vous met le code utilisé :

$file_contents = preg_replace_callback(
   '`echo\s*([\'"])(.*?)\1;`sm',
   create_function(
  '$matches',
  'return stripslashes($matches[2]);'
   ),
   $file_contentsc
);

echo "$file_contents";
3
Rejoignez-nous