Menu

PHP str_replace(): substituir texto numa string

str_replace($search, $replace, $subject) substitui cada ocorrência de $search por $replace. Veja arrays de valores de busca e substituição, contagem de substituições, str_ireplace sem diferenciar maiúsculas e como substituir só a primeira ocorrência.

Esta página tem editores executáveis - edite, execute e veja a saída na hora.

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_.

Ilustração das linguagens de programação do Coddy

Aprenda a programar com o Coddy

COMEÇAR