strtr

strtr($string, $from, $to)
strtr($string, $array)

Remplace des caractères ou des parties d’un texte selon une table de traduction. Avec trois paramètres, elle remplace caractère par caractère, avec un tableau des textes entiers. Contrairement à str_replace(), elle ne parcourt le texte qu’une seule fois, elle ne modifie donc pas un texte déjà remplacé.

Paramètres

  • $string – le texte à convertir.
  • $from, $to – deux chaînes de même longueur. Chaque caractère de $from est remplacé par le caractère à la même position dans $to.
  • $array – à la place de la paire $from et $to : un tableau de la forme texte cherché => remplacement.

Exemples

// trois paramètres – caractère par caractère
echo strtr("2026/09/30", "/", "-"); // 2026-09-30
echo strtr("abc", "ab", "xy"); // xyc
// un tableau – des textes entiers
echo strtr("Bonjour :name, vous avez :count messages.", array(":name" => "Marie", ":count" => 3)); // Bonjour Marie, vous avez 3 messages.
// un texte remplacé n'est pas retraité – échanger deux caractères
echo strtr("ab", array("a" => "b", "b" => "a")); // ba
// str_replace remplace l'un après l'autre et modifie de nouveau le résultat du premier remplacement
echo str_replace(array("a", "b"), array("b", "a"), "ab"); // aa
// le texte cherché le plus long a la priorité
echo strtr("Salut tous", array("Salut" => "Bonjour", "Salut tous" => "Bonjour à tous")); // Bonjour à tous
// supprimer les accents – lettres accentuées seulement sous forme de tableau
echo strtr("Crème brûlée", array("è" => "e", "û" => "u", "é" => "e", "É" => "E", "ü" => "u", "ñ" => "n")); // Creme brulee
// avec trois paramètres, les lettres accentuées se cassent
var_dump(mb_check_encoding(strtr("café", "é", "e"), "UTF-8")); // bool(false)

Points d’attention

  • La forme à trois paramètres travaille avec des octets. Une lettre accentuée occupe deux octets en UTF-8 et le résultat est un texte invalide. Pour un texte avec accents, utilisez la forme avec tableau.
  • Si $from et $to ont des longueurs différentes, les caractères en trop de la plus longue sont ignorés.
  • Le tableau n’est pas traité dans l’ordre comme avec str_replace(). À chaque endroit du texte, c’est la clé correspondante la plus longue qui est cherchée, et un texte remplacé n’est plus examiné. strtr convient donc aux modèles et à l’échange de valeurs.
  • La classe Transliterator de l’extension intl sait supprimer les accents de n’importe quel texte. Un tableau maison doit contenir toutes les lettres qui peuvent apparaître dans le texte.

Fonctions associées :
str_replace()
str_ireplace()
preg_replace()