Menu

PHP str_replace() : remplacer du texte dans une chaîne

str_replace($search, $replace, $subject) remplace chaque occurrence de $search par $replace. Tableaux de recherche et de remplacement, compter les remplacements, str_ireplace insensible à la casse, et remplacer seulement la première occurrence.

Cette page contient des éditeurs exécutables - modifiez, exécutez et voyez la sortie instantanément.

str_replace($search, $replace, $subject) renvoie une copie de $subject où chaque occurrence de $search est remplacée par $replace. str_replace('world', 'PHP', 'Hello world') renvoie "Hello PHP".

La fonction renvoie la nouvelle chaîne ; elle ne modifie pas la variable que vous passez. Affectez le résultat, même à la même variable : $text = str_replace(...).

Syntaxe

str_replace(
    array|string $search,
    array|string $replace,
    string|array $subject,
    int &$count = null
): string|array

Chacun des trois premiers arguments peut être une chaîne ou un tableau. Si $subject est un tableau, le remplacement s'applique à chaque élément et vous obtenez un tableau avec les mêmes clés : str_replace('.txt', '.md', ['a.txt', 'b.txt']) renvoie ['a.md', 'b.md']. La recherche est sensible à la casse et compare du texte brut, pas des motifs. Pour des motifs, utilisez preg_replace().

Remplacer plusieurs chaînes à la fois

Passez des tableaux pour $search et $replace. La première valeur cherchée est remplacée par le premier remplacement, la deuxième par le deuxième, et ainsi de suite. Si $replace est une seule chaîne, chaque valeur cherchée est remplacée par elle, ce qui est le moyen court de supprimer un ensemble de caractères.

Le piège de l'ordre et strtr()

Avec des tableaux, str_replace() applique les remplacements l'un après l'autre sur toute la chaîne. Une recherche ultérieure peut trouver du texte qu'un remplacement précédent vient d'insérer. strtr() avec un tableau remplace tout en une seule passe, essaie d'abord les clés les plus longues et ne touche jamais au texte déjà remplacé.

Utilisez strtr() pour des échanges et pour des marqueurs de template qui pourraient apparaître dans les valeurs.

Compter les remplacements

Le quatrième argument reçoit le nombre de remplacements effectués. Passez une variable ; PHP écrit dedans.

Remplacement insensible à la casse avec str_ireplace

str_ireplace() prend les mêmes arguments et ignore la casse lors de la recherche. Le remplacement est inséré exactement comme vous l'avez écrit.

str_ireplace() ne gère la casse que pour les lettres ASCII. Pour un remplacement insensible à la casse de lettres accentuées ou cyrilliques, utilisez preg_replace() avec les modificateurs i et u.

Remplacer seulement la première occurrence

str_replace() remplace toujours tout. Pour ne remplacer que la première correspondance, trouvez-la avec strpos() et découpez-la avec substr_replace() :

Pour la dernière occurrence, utilisez strrpos() à la place de strpos().

Supprimer espaces, sauts de ligne et autres caractères

Remplacer par une chaîne vide supprime le texte. Un nettoyage courant supprime les sauts de ligne ou tous les espaces, et une saisie japonaise contient souvent des espaces pleine chasse ( , U+3000) qu'une recherche de " " normale ne trouve pas.

Placez "\r\n" avant "\n" et "\r" dans le tableau, pour qu'un saut de ligne Windows devienne un seul espace et non deux.

Questions fréquentes

Comment remplacer du texte dans une chaîne en PHP ?

Utilisez str_replace($search, $replace, $subject) : str_replace('cat', 'dog', 'cat and cat') renvoie "dog and dog". Elle remplace chaque occurrence et renvoie une nouvelle chaîne ; l'original n'est pas modifié.

str_replace est-elle sensible à la casse ?

Oui. str_replace('php', 'PHP', 'Php') ne change rien. Utilisez str_ireplace(), qui prend les mêmes arguments et ignore la casse.

Comment remplacer seulement la première occurrence en PHP ?

str_replace() n'a pas d'argument de limite. Trouvez la position avec strpos() et utilisez substr_replace($s, $replace, $pos, strlen($search)), ou utilisez preg_replace('/' . preg_quote($search, '/') . '/', $replace, $s, 1).

Comment remplacer plusieurs chaînes à la fois en PHP ?

Passez des tableaux : str_replace(['a', 'b'], ['1', '2'], $s). Les remplacements s'exécutent dans l'ordre, donc une recherche ultérieure peut trouver du texte inséré par une précédente. strtr($s, ['a' => '1', 'b' => '2']) remplace tout en une passe et ne remplace jamais deux fois.

str_replace fonctionne-t-elle avec du texte japonais ?

Oui. str_replace() compare des octets, et un caractère UTF-8 complet ne correspond jamais à l'intérieur d'un autre caractère, donc str_replace('東京', '大阪', $s) est sûr. Pas besoin de version mb_.

Illustration des langages de programmation de Coddy

Apprendre à coder avec Coddy

COMMENCER