Je me souviens de l'avoir déjà fait, mais je ne trouve pas le code. J'utilise str_replace pour remplacer un caractère comme celui-ci: str_replace(':', ' ', $string);
mais je souhaite remplacer tous les caractères suivants \/:*?"<>|
, sans effectuer str_replace pour chacun d'eux.
str_replace()
peut prendre un tableau, vous pouvez donc faire:
$new_str = str_replace(str_split('\\/:*?"<>|'), ' ', $string);
Sinon, vous pouvez utiliser preg_replace()
:
$new_str = preg_replace('~[\\\\/:*?"<>|]~', ' ', $string);
Comme ça:
str_replace(array(':', '\\', '/', '*'), ' ', $string);
Ou, dans les PHP modernes (quelque chose à partir de la 5.4), les mots légèrement moins verbeux:
str_replace([':', '\\', '/', '*'], ' ', $string);
Par exemple, si vous souhaitez remplacer search1 par replace1 et search2 par replace2, le code suivant fonctionnera:
print str_replace(
array("search1","search2"),
array("replace1", "replace2"),
"search1 search2"
);
// Sortie: replace1 replace2
str_replace(
array("search","items"),
array("replace", "items"),
$string
);
Si vous ne remplacez que des caractères simples, vous devez utiliser strtr()
Vous pouvez utiliser preg_replace () . L'exemple suivant peut être exécuté à l'aide de la ligne de commande php:
<?php
$s1 = "the string \\/:*?\"<>|";
$s2 = preg_replace("^[\\\\/:\*\?\"<>\|]^", " ", $s1) ;
echo "\n\$s2: \"" . $s2 . "\"\n";
?>
Sortie:
$ s2: "la chaîne"
Je suppose que tu t'occupes de ça:
// example
private const TEMPLATE = __DIR__.'/Resources/{type}_{language}.json';
...
public function templateFor(string $type, string $language): string
{
return \str_replace(['{type}', '{language}'], [$type, $language], self::TEMPLATE);
}