Remplacement dans une chaîne en PHP
PHP possède des fonctions utiles pour procéder à des remplacements de caractères ou de sous-chaînes.
Remplacer des caractères dans une chaîne
La fonction strtr() permet de remplacer dans une chaîne, certains caractères par d’autres caractères.
<?php
$chaine = "daniel";
echo strtr($chaine, "ail", "oy"); // 'a' sera remplacé par 'o', 'i' par 'y', 'l' sera ignoré
?>
Affichage
donyel
Note : si le deuxième et troisième paramètre sont de tailles différentes, les caractères en trop dans l’un ou l’autre seront ignorés.
Problème avec les accents
La fonction strtr() travaille directement sur les octets donc le remplacement des accents peut poser problème avec UTF-8. Cela vient du fait que les caractères ne sont pas encodés forcément sur 8 bits. La solution consiste donc à decoder l’utf-8 en iso-8859-1, avec la fonction utf8_decode().
<?php
$chaine = "accent-äåö";
echo strtr($chaine, "äåö", "aao")."<br>"; // sans conversion
echo strtr(utf8_decode("accent-äåö"), utf8_decode("äåö"), utf8_decode("aao"));
?>
Affichage
accent-oao�o�
accent-aao
La fonction strtr() peut aussi travailler avec des sous-chaines et non pas sur les octets. Il peut remplacer des sous-chaînes de la chaînes par d’autres sous-chaînes. Dans ce cas, il faut fournir un tableau associatif comme deuxième paramètre de la fonction strtr() où les clés correspondent aux sous-chaînes à remplacer et les valeurs étant les sous-chaînes de remplacement.
<?php
$chaine = "XHTML et CSS2";
$tab = array("XHTML"=>"HTML5","CSS2"=>"CSS3");
echo strtr($chaine,$tab);
?>
Affichage
HTML5 et CSS3
Remplacer un motif dans une chaîne
La fonction str_replace() permet de remplacer un motif dans une chaîne. Il faut indiquer la sous-chaîne à rechercher, puis la sous-chaîne de remplacement et enfin la chaîne de référence où faire le remplacement.
<?php
$recherche = "daniel"; // la sous-chaîne recherchée
$remplacement = "david"; // la sous-chaîne de remplacement
$chaine = "daniel dort!"; // chaîne de référence
echo str_replace($recherche,$remplacement,$chaine);
?>
Affichage
david dort!
La fonction str_replace() est sensible à la casse, utiliser str_ireplace() pour faire une recherche insensible à la casse.
<?php
$recherche = "daniel"; // la sous-chaîne recherchée
$remplacement = "david"; // la sous-chaîne de remplacement
$chaine = "DAniel dort!"; // chaîne de référence
echo str_ireplace($recherche,$remplacement,$chaine);
?>
Affichage
david dort!
Si vous fournissez un tableau comme paramètre de recherche, il sera considérer comme une liste de chaînes à remplacer.
<?php
$tab = array("é","è","ê"); // tableau de valeurs à rechercher
$remplacement = "e"; // la valeur de remplacement
$chaine = "les accents : é è ê!"; // chaîne de référence
echo str_replace($tab,$remplacement,$chaine);
?>
Affichage
les accents : e e e!
Si vous fournissez aussi un tableau comme paramètre de remplacement, chaque élément du tableau de recherche sera remplacé par l’élément correspondant du tableau de remplacement.
<?php
$tab = array("XHTML","CSS2"); // tableau de valeurs à rechercher
$remplacement = array("HTML5","CSS3"); // tableau de valeurs de remplacement
$chaine = "On m'enseigne le XHTML et le CSS2"; // chaîne de référence
echo str_replace($tab,$remplacement,$chaine);
?>
Affichage
On m'enseigne le HTML5 et le CSS3
Vous pouvez aussi compter le nombre de remplacement dans une variable passée en quatrième paramètre de la fonction str_replace().
<?php
$tab = array("XHTML","CSS2"); // tableau de valeurs à rechercher
$remplacement = array("HTML5","CSS3"); // tableau de valeurs de remplacement
$chaine = "On m'enseigne le XHTML et le CSS2"; // chaîne de référence
echo str_replace($tab,$remplacement,$chaine,$nb); // $nb récupère le nombre de remplacement
echo "<br>Nombre de remplacement : ".$nb;
?>
Affichage
On m'enseigne le HTML5 et le CSS3
Nombre de remplacement : 2
Remplacer un motif dans une chaîne à partir d’une position
Vous pouvez effectuer un remplacement à partir d’une position seulement avec la fonction substr_replace(). Il faut indiquer en premier paramètre la chaîne de référence, en deuxième paramètre la chaîne de remplacement, et en troisième paramètre la position du premier caractère à remplacer.
<?php
$chaine = "On m'enseigne le XHTML et le CSS2"; // chaîne de référence
$pos = strpos($chaine,"X"); // recherche de la position de 'X' avec strpos()
$remplacement = "judo";
echo substr_replace($chaine,$remplacement,$pos);
?>
Affichage
On m'enseigne le judo