8796 sujets

Développement web côté serveur, CMS

Bonjour tout le monde!

J'ai créer une petite fonction qui me permets de formater le texte que je souhaite. Elle remplace tout les caractères spéciaux etc.


function formatIt($stringToFormat){
      $table = array(
          'Š'=>'S', 'š'=>'s', 'Ð'=>'Dj', 'd'=>'dj', 'Ž'=>'Z', 'ž'=>'z', 'C'=>'C', 'c'=>'c', 'C'=>'C', 'c'=>'c',
          'À'=>'A', 'Á'=>'A', 'Â'=>'A', 'Ã'=>'A', 'Ä'=>'A', 'Å'=>'A', 'Æ'=>'A', 'Ç'=>'C', 'È'=>'E', 'É'=>'E',
          'Ê'=>'E', 'Ë'=>'E', 'Ì'=>'I', 'Í'=>'I', 'Î'=>'I', 'Ï'=>'I', 'Ñ'=>'N', 'Ò'=>'O', 'Ó'=>'O', 'Ô'=>'O',
          'Õ'=>'O', 'Ö'=>'O', 'Ø'=>'O', 'Ù'=>'U', 'Ú'=>'U', 'Û'=>'U', 'Ü'=>'U', 'Ý'=>'Y', 'Þ'=>'B','ß'=>'Ss',
          'à'=>'a', 'á'=>'a', 'â'=>'a', 'ã'=>'a', 'ä'=>'a', 'å'=>'a', 'æ'=>'a', 'ç'=>'c', 'è'=>'e', 'é'=>'e',
          'ê'=>'e', 'ë'=>'e', 'ì'=>'i', 'í'=>'i', 'î'=>'i', 'ï'=>'i', 'ð'=>'o', 'ñ'=>'n', 'ò'=>'o', 'ó'=>'o',
          'ô'=>'o', 'õ'=>'o', 'ö'=>'o', 'ø'=>'o', 'ù'=>'u', 'ú'=>'u', 'û'=>'u', 'ý'=>'y', 'ý'=>'y', 'þ'=>'b',
          'ÿ'=>'y', 'R'=>'R', 'r'=>'r',' '=>'-'
      );
     global $formatedString; 
     $formatedString = strtr($stringToFormat, $table);
}

Quand j'appelle cette fonction en dehors d'une autre fonction elle marche à merveille Smiley biggrin

$stringToFormat="Je suis une légende"; // texte à remplacer
formatIt($stringToFormat); // J'appelle la fonction
echo $formatedString; // Affichera "Je-suis-une-legende"

Mais..quand j'appelle cette fonction depuis une autre fonction, elle ne s'exécute pas!! Smiley bawling

function uneAutreFonction(){
  $stringToFormat="Je suis une légende"; // texte à remplacer
  formatIt($stringToFormat); // J'appelle la fonction
  echo $formatedString; // N'affiche rien ...
}


Savez vous pourquoi je ne peut pas afficher le résultat de la fonction formatIt() depuis une autre fonction? J'ai pourtant déclarer la variable $formatedString en global, cela devrait pourtant la rendre accessible depuis une autre fonction non?

Merci d'avance! Smiley cligne
Modifié par ghijselinck (07 Jun 2009 - 10:18)
Auto-réponse :

J'ai trouvée comment rendre la variable globale "$formatedString" accessible depuis une autre fonction..

Au lieu d'y faire appel comme cela :

echo $formatedString;

Je le fait comme ceci :

echo $GLOBALS['formatedString'];


Enfin soit, j'ai posté ce sujet un peut trop vite mais peut être que quelqu'un connait une meilleur façon de faire ce genre d'action..je suis preneur. Smiley cligne

Bon dimanche!
Hello,

ghijselinck a écrit :
J'ai pourtant déclarer la variable $formatedString en global, cela devrait pourtant la rendre accessible depuis une autre fonction non?
Oui... sauf si la variable en question n'existe que dans une autre fonction et pas au niveau du script. Smiley cligne

Voir également ce sujet.
Modérateur
Salut,

En passant par là, j'ai vu des petites difficultés. Ce que je ne comprends pas, c'est pourquoi globaliser une variable qui va être changée ? Smiley biggol

Je pense que tu devrais regarder ceci :


<?php
function formatIt($stringToFormat){
	$table = array(
		'Š'=>'S', 'š'=>'s', 'Ð'=>'Dj', 'd'=>'dj', 'Ž'=>'Z', 'ž'=>'z', 'C'=>'C', 'c'=>'c', 'C'=>'C', 'c'=>'c',
		'À'=>'A', 'Á'=>'A', 'Â'=>'A', 'Ã'=>'A', 'Ä'=>'A', 'Å'=>'A', 'Æ'=>'A', 'Ç'=>'C', 'È'=>'E', 'É'=>'E',
		'Ê'=>'E', 'Ë'=>'E', 'Ì'=>'I', 'Í'=>'I', 'Î'=>'I', 'Ï'=>'I', 'Ñ'=>'N', 'Ò'=>'O', 'Ó'=>'O', 'Ô'=>'O',
		'Õ'=>'O', 'Ö'=>'O', 'Ø'=>'O', 'Ù'=>'U', 'Ú'=>'U', 'Û'=>'U', 'Ü'=>'U', 'Ý'=>'Y', 'Þ'=>'B','ß'=>'Ss',
		'à'=>'a', 'á'=>'a', 'â'=>'a', 'ã'=>'a', 'ä'=>'a', 'å'=>'a', 'æ'=>'a', 'ç'=>'c', 'è'=>'e', 'é'=>'e',
		'ê'=>'e', 'ë'=>'e', 'ì'=>'i', 'í'=>'i', 'î'=>'i', 'ï'=>'i', 'ð'=>'o', 'ñ'=>'n', 'ò'=>'o', 'ó'=>'o',
		'ô'=>'o', 'õ'=>'o', 'ö'=>'o', 'ø'=>'o', 'ù'=>'u', 'ú'=>'u', 'û'=>'u', 'ý'=>'y', 'ý'=>'y', 'þ'=>'b',
		'ÿ'=>'y', 'R'=>'R', 'r'=>'r',' '=>'-'
	);

	return strtr($stringToFormat, $table);
}

function uneAutreFonction(){
	$stringToFormat= func_get_arg(0);

	return formatIt($stringToFormat); // appelle la fonction
}


$br = "<br />";
$stringToFormat = "Je suis une légende"; // texte à remplacer


echo formatIt($stringToFormat).$br; // appelle et affiche la fonction
echo uneAutreFonction($stringToFormat).$br; // appelle et affiche l'autre fonction

echo "<hr />";

$unTxt = formatIt($stringToFormat);
$unAutreTxt = uneAutreFonction($stringToFormat);
echo $unTxt.$br.$unAutreTxt;



?>


et aller ici afin de mieux comprendre le mécanisme d'une fonction Smiley cligne

++
Hello Nolem,

Nolem a écrit :
En passant par là, j'ai vu des petites difficultés. Ce que je ne comprends pas, c'est pourquoi globaliser une variable qui va être changée ?
On globalise une variable justement parce qu'elle va être changée à différents endroits du script. Smiley cligne

Sinon ton code fonctionne puisque la variable est passée en paramètre à chaque fonction mais comme dit plus haut le problème se pose quand une variable n'existe qu'au sein d'une fonction (ou d'une classe) et qu'elle n'est pas passée en paramètre. Smiley murf


Cela dit ton code est plus logique puisque la variable globale en question est inutile :
<?php
function formatIt($stringToFormat){
      $table = array(
          'Š'=>'S', 'š'=>'s', 'Ð'=>'Dj', 'd'=>'dj', 'Ž'=>'Z', 'ž'=>'z', 'C'=>'C', 'c'=>'c', 'C'=>'C', 'c'=>'c',
          'À'=>'A', 'Á'=>'A', 'Â'=>'A', 'Ã'=>'A', 'Ä'=>'A', 'Å'=>'A', 'Æ'=>'A', 'Ç'=>'C', 'È'=>'E', 'É'=>'E',
          'Ê'=>'E', 'Ë'=>'E', 'Ì'=>'I', 'Í'=>'I', 'Î'=>'I', 'Ï'=>'I', 'Ñ'=>'N', 'Ò'=>'O', 'Ó'=>'O', 'Ô'=>'O',
          'Õ'=>'O', 'Ö'=>'O', 'Ø'=>'O', 'Ù'=>'U', 'Ú'=>'U', 'Û'=>'U', 'Ü'=>'U', 'Ý'=>'Y', 'Þ'=>'B','ß'=>'Ss',
          'à'=>'a', 'á'=>'a', 'â'=>'a', 'ã'=>'a', 'ä'=>'a', 'å'=>'a', 'æ'=>'a', 'ç'=>'c', 'è'=>'e', 'é'=>'e',
          'ê'=>'e', 'ë'=>'e', 'ì'=>'i', 'í'=>'i', 'î'=>'i', 'ï'=>'i', 'ð'=>'o', 'ñ'=>'n', 'ò'=>'o', 'ó'=>'o',
          'ô'=>'o', 'õ'=>'o', 'ö'=>'o', 'ø'=>'o', 'ù'=>'u', 'ú'=>'u', 'û'=>'u', 'ý'=>'y', 'ý'=>'y', 'þ'=>'b',
          'ÿ'=>'y', 'R'=>'R', 'r'=>'r',' '=>'-'
      );

     return strtr($stringToFormat, $table);
}

function uneAutreFonction(){
  $stringToFormat="Je suis une légende"; // texte à remplacer
  echo formatIt($stringToFormat); // J'appelle la fonction
}

uneAutreFonction();
?>

Modifié par Heyoan (07 Jun 2009 - 15:49)
Modérateur
Hello Heyoan, Smiley smile

Heyoan a écrit :

...
On globalise une variable justement parce qu'elle va être changée à différents endroits du script. Smiley cligne
...


Exact. Dans le cas de notre ami ghijselinck et suivant la structure de son code, j'ai omis de préciser que c'était inutile de le faire. Par contre, comme nous n'avons pas l'intégralité du code source (tenant -> aboutissant), je peux me tromper. En tout cas je te remercie d'avoir vérifié mon code. Smiley smile Je l'ai fait sans filet.

++