Preg_replace: Erreur 500 [Résolu]

Signaler
Messages postés
146
Date d'inscription
vendredi 28 mai 2010
Statut
Membre
Dernière intervention
21 juillet 2013
-
Messages postés
146
Date d'inscription
vendredi 28 mai 2010
Statut
Membre
Dernière intervention
21 juillet 2013
-
Bonjour,

Voilà j'ai un petit problème, en effet avec le code ci-dessous mon serveur retourne l'erreur 500.

Et je ne trouve pas l'erreur.

[> Le but est de remplacer par exemple "\141" par "a", et ainsi de suite.]

<?php
$contenu = "\141\142"
$search = array ('\141','\142','\143','\144','\145','\146','\147','\150','\151','\152','\153','\154','\155','\156','\157','\158','\159','\160','\161','\162','\163','\164','\165','\165','\167','\170','\171','\172');
$replace = array ('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z');
$contenu = preg_replace($search, $replace, $contenu);
echo $contenu;
?>


Merci d'avance

5 réponses

Messages postés
11
Date d'inscription
mercredi 18 octobre 2006
Statut
Membre
Dernière intervention
27 août 2012
1
Tu dervais essayer pour ton erreur 500.
<?php phpinfo(); ?>

Sauf erreur de ma part, je ne pense que se soit liée à ton code.

Sinon, dans ton code tu as plusieurs erreurs.

D'abord, tu as oublié un ; au début. (T'inquiète ça arrive hyper souvent )

Ensuite, tu veux utiliser de l’expression régulière, il faut donc penser aux délimiteur.
les fameux / exemple : $v = array('/\141/', ...

Ensuite, tu traites des <>.
Donc de préférence, il vaux mieux avoir la même taille.

Voilà.

2 exemples. Il remplisse la même fonction

Exemple 1 : Avec RegEx
<?php
  $GlobalTime = microtime(true);
/* Déclaration constant */

$A = array ('/\141/', '/\142/', '/\143/','/\144/','/\145/','/\146/','/\147/','/\150/','/\151/','/\152/','/\153/','/\154/','/\155/','/\156/','/\157/','/\158/','/\159/','/\160/','/\161/','/\162/','/\163/','/\164/','/\165/','/\165/','/\167/','/\170/', '/\171/');
$B = array ('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z');

$Sample = "\141\142\141\142\141\142\141\142\141\142\141\142\141\142\141\142\141\142\141\142\141\142\141\142\141\142\141\142";
$Contenu = preg_replace($A, $B, $Sample);

echo $Contenu;

 $TimeOut 	  = microtime(true);
 $GlobalDuree  = ($TimeOut-$GlobalTime) * 100;
 echo "Temps execution : $GlobalDuree ms";


?>


Exemple 2 : sans RegEx

<?php
  $GlobalTime = microtime(true);
/* Déclaration constant */
//			  a		 b		c		d	   e	  f		 g		h	   i	  j		 k		l	   m	  n		o		p	  q		 r	     s		t	   u	  v		w		x	   y	  z		 
$A = array ('\141','\142','\143','\144','\145','\146','\147','\150','\151','\152','\153','\154','\155','\156','\157','\158','\159','\160','\161','\162','\163','\164','\165','\165','\167','\170');
$B = array ('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z');
  
/* function de conversion */
function Decode($Sample, $In, $Out)
{
   // Controle de table
   $IsArray_In  = is_array($In);
   $IsArray_Out = is_array($Out);
   $Count_In    = count($In);
   $Count_Out   = count($Out);
   
   if (($IsArray_In&&$IsArray_Out)&&($Count_In==$Count_Out))
   {
     $Result = $Sample;
     while (list($Index, $Search) = each($In))
     {
       $Result = str_replace($A, $B[$Index], $Result);
     }
    }
else
{
  $Erreur = "";
  $Erreur .= "Erreur de table : \n ";
  $Erreur .= ($Count_In<>$Count_Out)?"\tNombre d'éléments diférents \n":"";
  $Erreur .= (!$IsArray_In)?"\tVariable d'entree n'est pas une variable \n":"";
  $Erreur .= (!$IsArray_Out)?"\tVariable de sortie n'est pas une variable \n":"";
  $Erreur .= "

";
  die($Erreur);
}
  return $Result;
}

$Sample = "\141\142\141\142\141\142\141\142\141\142\141\142\141\142\141\142\141\142\141\142\141\142\141\142\141\142\141\142";
$Contenu = Decode($Sample, $A, $B);

echo $Contenu;

 $TimeOut 	  = microtime(true);
 $GlobalDuree  = ($TimeOut-$GlobalTime) * 100;
 echo "Temps execution : $GlobalDuree ms";

?>

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

En plus du point virgule manquant déjà signalé, tu n'aurais pas du utiliser preg_replace() mais str_replace() :
<?php

$contenu = "\141\142";
$search = array ('\141','\142','\143','\144','\145','\146','\147','\150','\151','\152','\153','\154','\155','\156','\157','\158','\159','\160','\161','\162'\
,'\163','\164','\165','\165','\167','\170','\171','\172');
$replace = array ('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z');
$contenu = str_replace($search, $replace, $contenu);
echo $contenu;


Et en simplifiant un peu tout ça :
<?php

$ctn = "\141\142";
echo $ctn;

Et le pire c'est que ça marche bien, étant entre doubles quotes c'est interprété :)
Messages postés
146
Date d'inscription
vendredi 28 mai 2010
Statut
Membre
Dernière intervention
21 juillet 2013
3
Ok, merci.

J'ai utilisé la méthode de TychoBrahe et j'ai rajouté les délimiteurs comme Iwoks me l'a dit.

Et ça donne ça sans soucis:

<?php

$contenu = "\141\142";
$search = array ('/\141/','/\142/','/\143/','/\144/','/\145/','/\146/','/\147/','/\150/','/\151/','/\152/','/\153/','/\154/','/\155/','/\156/','/\157/','/\158/','/\159/','/\160/','/\161/','/\162/','/\163/','/\164/','/\165/','/\165/','/\167/','/\170/','/\171/','/\172/');
$replace = array ('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z');
$contenu = str_replace($search, $replace, $contenu);
echo $contenu; // ici on aura >> ab <<

?>


Merci à vous deux.
Messages postés
1309
Date d'inscription
samedi 31 janvier 2009
Statut
Membre
Dernière intervention
5 juin 2013
12
Rofl, t'as tout bien compris :p

Les délimiteurs, c'est uniquement pour les regexp, dans ce que je t'ai mis ils ne servent strictement à rien. Si tu vois le bon résultat c'est uniquement parce que ta chaîne de caractère n'a pas bougée d'un pouce, comme indiqué à al fin de mon post.
Messages postés
146
Date d'inscription
vendredi 28 mai 2010
Statut
Membre
Dernière intervention
21 juillet 2013
3
Oui, mais sans les limiteur avec mon code php avec str_replace le serveur me dit " configuration incorrecte".

Bonne soirée