Informatique


Les méthodes string

Nettoyer en début et en fin de chaîne

Lorsqu'on récupère des données à partir d'un formulaire il est souvent intéressant de nettoyer la chaîne de caractères reçues des éventuels espaces ou caractères indésirables en début ou en fin de chaîne.

ltrim(), rtrim() et trim() reçoivent deux paramètres: la chaîne à nettoyer et les caractères à supprimer.

Lorsque le deuxième paramètre est absent ces méthodes supprimes les espaces.

Syntaxe
	string trim ( string $str [, string $character_mask = " \t\n\r\0\x0B" ] )
	//idem pour ltrim et rtrim
	
Démo
<?php
	$a=".....Do John...";
	echo"Sans la méthode trim(): " .$a."<br>";
	$a=ltrim($a,".");
	echo"Avec la méthode trim(): ".$a;
?>

Casse des caractères

Ces méthodes permettent de normaliser la casse des caractères entés par l'utilisateur.

On utilisera:

  • strtoupper(), tous les caractères en majuscules
  • strtolower(), tous les caractères en minuscules
  • ucfirst(), la première lettre du premier mot en majuscule
  • lcfirst(), la première lettre du premier mot en minuscule
  • ucwords(), la première lettre de chaque mot en majuscule
Syntaxe
	string strtoupper ( string $string )
	string strtolower ( string $string )
	string ucfirst ( string $str )
	string lcfirst ( string $str )
	string ucwords ( string $str)
	
Démo
<?php
	$a="Heinz Dooffenschmirtz";
	echo($a."<br>");
	$b=strtoupper($a);
	echo "Avec la méthode strtoupper(): ".$b."<br>";
	$b=strtolower($b);
	echo "Avec la méthode strtolower(): ".$b."<br>";
	$b=ucfirst($b);
	echo "Avec la méthode ucfirst(): ".$b."<br>";
	$b=ucwords($b);
	echo "Avec la méthode ucwords(): ".$b."<br>";
	$b=lcfirst($b);
	echo "Avec la méthode ucwords(): ".$b."<br>";
?>

Ajouter le caractère d'échappement

addslashes()

Voilà une méthode indispensable, elle est utilisée avant d'enregistrer des données dans un SGBDR.

L' antislash est ajouté devant les apostrophes, les guillemets, les antislash et le caractère NULL.

Syntaxe
string addslashes ( string $str )	
Démo
<?php
	$a="L'individu Maléfique \anonyme, Heinz Doofnscmirtz, n'est pourtant pas si \"méchant\".";
	$a=addslashes($a);
	echo $a;
?>

L' antislash n'est pas ajouté devant les antislashs de \"méchant\" car dans l'exemple il repésente le caractère d'échappement.
L'antislash est ajouté directement devant les guillemets de la chaîne "méchant" !
Par contre un antislash a bien été ajouté devant \anonyme car dans ce cas il ne représente pas le caractère d'échappement mais tout simplement le carctère antislash lui-même.

quotemeta()

Cette méthode a le même effet que addslashes() sauf que les antislahs sont pacés devant les caractères ., \, +, *, ?, [, ], (, ), $ et ^ .

Syntaxe
string quotemeta ( string $str )
Démo
<?php
	$a="(5 +3)=8?";
	$a=quotemeta($a);
	echo $a;
?>

Enlever le caractère d'échappement

stipslashes() enlève les carctères d'échappement placés par addslashes() et quotemeta().

Syntaxe
string striplashes ( string $str )	
Démo
<?php
	$a="L'individu Maléfique anonyme, Heinz Doofnscmirtz, n'est pourtant pas si \"méchant\".";
	$a=addslashes($a);
	echo $a."<br>";
	$a=stripslashes($a);
	echo($a."<br>");
	$b="(5 +3)=8?";
	$b=quotemeta($b);
	echo $b."<br>";
	$b=stripslashes($b);
	echo $b;
?>

Traduire en caractères spéciaux

htmlentities() permet de remplacer les caractères spéciaux (é, ç, à, <, > etc.) par leurs équivalents html.

Cette méthode permet d'empêcher l'utilisateur d'intégrer du code html dans les formulaires, ce qui en fait un outil très précieux pour garantir l'intégrité des données.

Syntaxe
string htmlentities ( string $string [, int $flags = ENT_COMPAT | ENT_HTML401 
[, string $encoding = ini_get("default_charset") [, bool $double_encode = TRUE ]]] )
Démo
<?php
	//Pour voir le résultat il faut évidemment afficher la source
	$a="L'individu Maléfique anonyme, Heinz Doofnscmirtz, n'est pourtant pas si \"méchant\" <button>.";
	$a=htmlentities($a,ENT_QUOTES, "UTF-8");
	echo $a;
?>

Les 3 paramètres les plus utilisés de la méthode sont:

  • la chaîne à traiter
  • une constante spécifiant le traitement des guillemets
  • le jeu de caractères utilisé, le plus simple est de toujours utiliser UTF-8

Pour reconvertir en caractères ordinaires il suffit d'utiliser la méthode html_entity_decode() avec les mêmes paramètres.

Démo
<?php
	//Pour voir le résultat il faut évidemment afficher la source
	$a="L'individu Maléfique anonyme, Heinz Doofnscmirtz, n'est pourtant pas si \"méchant\" <button>.";
	$a=htmlentities($a,ENT_QUOTES, "UTF-8");
	echo $a."<br>";
	$b=html_entity_decode($a,ENT_QUOTES, "UTF-8");
	echo $b;
?>

Supprimer les balises html

strip_tags() supprime les balises HTML et PHP d'une chaîne.

Imaginons un petit rigolo qui entrerait la chaîne suivante dans un formulaire, si cette chaîne est destinée à être afficher par un echo le navigateur affichera une boîte alert() qui nous réorientera inexorablement vers la page précédente! Bref, on ne pourra jamais afficher la page souhaitée!
strip_tags() permet de supprimer les balises html et donc l'ensemble des codes JS qui pourrait nous pourrir la vie.

Cette méthode permet d'empêcher l'utilisateur d'intégrer du code html dans les formulaires, ce qui en fait un outil très précieux pour garantir l'intégrité des données.

Syntaxe
string strip_tags ( string $str [, string $allowable_tags ] )
Démo
<?php
$ch="<script>alert('Salut ma poule, on va un peu jouer ensemble!');history.back();</script>";
//Pour éviter la boîte alert()
echo(strip_tags($ch));
//L'affichage est gênant mais pas dangereux!
?>

Le paramètre optionnel allowable_tags permet de spécifier les balises qui ne doivent pas être supprimées.


Longueur d'une chaîne

strlen() permet de trouver la première occurrence d'une chaîne dans une chaîne.

Syntaxe
int strlen ( string $string )
Démo
<?php
	$ch="Ah te v'là perry l'Ornitorynque!";
	$nbrcarac=strlen($ch);
	echo "Nombre de caractères dans la chaîne \$ch: ".$nbrcarac;
?>

Trouver la première enccurence d'une chaîne

strstr() permet de rechercher une chaîne à l'intérieur d'une chaîne.

strstr() est sensible à la casse. Elle renvoie tous les caractères à partir de la chaîne recherchée.

Si la chaîne recherchée n'est pas trouvée la méthode renvoie false.

  • haystack la chaîne d'entrée
  • needle si needle n'est pas une chaîne, elle sera convertie en entier, et utilisée comme code ASCII du caractère correspondant
  • before_needle si vaut true, strstr() retourne la partie de haystack avant la première occurrence de needle (needle étant exclus)
Syntaxe
string strstr ( string $haystack , mixed $needle [, bool $before_needle = FALSE ] )
Démo
<?php
	$ch="Ah te v'là perry l'Ornitorynque, viens donc voir mon nouvel codehtmlinator!";
	$ch1="Ornitorynque";
	$chaine=strstr($ch,$ch1);
	echo "Chaîne renvoyée: ".$chaine;
	echo "<br>";
	$ch="Ah te v'là perry l'Ornitorynque, viens donc voir mon nouvel codehtmlinator!";
	$ch1="Ornitorynque";
	$chaine=strstr($ch,79);
	echo "Chaîne renvoyée: ".$chaine;
?>

Rechercher une chaîne dans une chaîne

substr() permet de retourner un segment de chaîne.

Cette méthode renvoie n caractères de la chaîne extraits à partir de l'indice i inclus.

Si n est omis la méthode renvoie tous les caractères à partir de l'indice i.

Cette méthode utilise 3 paramètres:

  • la chaîne à traiter
  • un entier (i), à partir duquel il faut commencer l'extraction
  • un entier (n), le nombre de caractères à extraire

Syntaxe
string substr ( string $string , int $start [, int $length ] )
Démo
<?php
	$ch="Ah te v'là perry l'Ornitorynque, viens donc voir mon nouvel codehtmlinator!";
	$chaine=substr($ch,11,21);
	echo("Chaîne renvoyée: ".$chaine);
?>

Rechercher et remplacer une chaîne

str_replace() permet de remplacer toutes les occurrences dans une chaîne.

str_replace() retourne une chaîne ou un tableau dont toutes les occurrences de search dans subject ont été remplacées par replace .

Cette méthode utilise 3 paramètres:

  • la chaîne à rechercher et remplacer
  • la nouvelle chaîne remplaçant la précédente
  • la chaîne de caractères à traiter

Syntaxe
mixed str_replace ( mixed $search , mixed $replace , mixed $subject [, int &$count ] )
Démo
<?php
	$ch="Perry est fort, Perry est grand, Perry est sage!";
	$chaine=str_replace("Perry","Louis",$ch);
	echo("Chaîne renvoyée: ".$chaine);
?>

Rechercher la position d'une chaîne dans une chaîne

strpos() permet de rehercher la position de la première occurrence dans une chaîne.

Cette méthode renvoie la position du 1er caractère de la première occurence de la chaîne recherchée.

Si la chaîne recherchée n'est pas trouvée la méthode renvoie false.

Cette méthode utilise 3 paramètres:

  • haystack la chaîne dans laquelle on doit chercher
  • needle si needle n'est pas une chaîne, il est converti en entier, et utilisé comme caractère de code ASCII correspondant
  • offset si spécifié, la recherche commencera à partir de ce nombre de caractères compté depuis le début de la chaîne. Si ce nombre est négatif, la recherche commencera en utilisant ce nombre de caractères mais en commençant par la fin de la chaîne.

Syntaxe
int strpos ( string $haystack , mixed $needle [, int $offset = 0 ] )
Démo
<?php
	$ch="Viens voir mon phpdebuggerinator, grâce à ce phpdebuggerinator le secteur des trois états sera bientôt mien!";
	$pos=strpos($ch,"phpdebuggerinator");
	echo("Position: ".$pos);
?>