str_replace($search, $replace, $subject) retorna uma cópia de $subject com cada ocorrência de $search substituída por $replace. str_replace('world', 'PHP', 'Hello world') retorna "Hello PHP".
A função retorna a nova string; ela não altera a variável que você passa. Atribua o resultado, mesmo que à mesma variável: $text = str_replace(...).
Sintaxe
str_replace(
array|string $search,
array|string $replace,
string|array $subject,
int &$count = null
): string|array
Cada um dos três primeiros argumentos pode ser uma string ou um array. Se $subject for um array, a substituição roda em cada elemento e você recebe um array de volta com as mesmas chaves: str_replace('.txt', '.md', ['a.txt', 'b.txt']) retorna ['a.md', 'b.md']. A busca diferencia maiúsculas e minúsculas e procura texto simples, não padrões. Para padrões, use preg_replace().
Substituir várias strings de uma vez
Passe arrays para $search e $replace. O primeiro valor de busca é substituído pela primeira substituição, o segundo pela segunda, e assim por diante. Se $replace for uma única string, todos os valores de busca são substituídos por ela, que é o jeito curto de remover um conjunto de caracteres.
A armadilha da ordem e o strtr()
Com arrays, o str_replace() executa uma substituição depois da outra sobre a string inteira. Uma busca posterior pode bater com um texto que uma substituição anterior acabou de inserir. O strtr() com um array substitui tudo numa única passada, tenta as chaves mais longas primeiro e nunca mexe num texto que já substituiu.
Use strtr() para trocas e para marcadores de template que podem aparecer nos valores.
Contar as substituições
O quarto argumento é preenchido com o número de substituições feitas. Passe uma variável; o PHP escreve nela.
Substituir sem diferenciar maiúsculas com str_ireplace
O str_ireplace() recebe os mesmos argumentos e ignora maiúsculas e minúsculas ao procurar. A substituição é inserida exatamente como você a escreveu.
O str_ireplace() só iguala letras ASCII. Para substituir sem diferenciar maiúsculas em letras acentuadas ou cirílicas, use preg_replace() com os modificadores i e u.
Substituir só a primeira ocorrência
O str_replace() sempre substitui tudo. Para substituir só a primeira correspondência, encontre-a com strpos() e recorte-a com substr_replace():
Para a última ocorrência, use strrpos() no lugar de strpos().
Remover espaços, quebras de linha e outros caracteres
Substituir por uma string vazia remove o texto. Uma limpeza comum remove quebras de linha ou todos os espaços, e entradas em japonês muitas vezes contêm espaços de largura total ( , U+3000) que uma busca por " " normal não encontra.
Coloque "\r\n" antes de "\n" e "\r" no array, para que uma quebra de linha do Windows vire um espaço e não dois.
Perguntas frequentes
Como substituo um texto numa string no PHP?
Use str_replace($search, $replace, $subject): str_replace('cat', 'dog', 'cat and cat') retorna "dog and dog". Ele substitui todas as ocorrências e retorna uma nova string; a original não muda.
O str_replace diferencia maiúsculas e minúsculas?
Sim. str_replace('php', 'PHP', 'Php') não muda nada. Use str_ireplace(), que recebe os mesmos argumentos e ignora a diferença.
Como substituo só a primeira ocorrência no PHP?
O str_replace() não tem argumento de limite. Encontre a posição com strpos() e use substr_replace($s, $replace, $pos, strlen($search)), ou use preg_replace('/' . preg_quote($search, '/') . '/', $replace, $s, 1).
Como substituo várias strings de uma vez no PHP?
Passe arrays: str_replace(['a', 'b'], ['1', '2'], $s). As substituições rodam em ordem, então uma busca posterior pode bater com um texto que uma anterior inseriu. strtr($s, ['a' => '1', 'b' => '2']) substitui tudo numa passada e nunca substitui de novo.
O str_replace funciona com texto acentuado ou japonês?
Sim. O str_replace() compara bytes, e um caractere UTF-8 completo nunca bate dentro de outro caractere, então str_replace('東京', '大阪', $s) é seguro. Não é preciso uma versão mb_.