Menu

PHP str_replace(): reemplazar texto en un string

str_replace($search, $replace, $subject) sustituye cada aparición de $search por $replace. Aprende a usar arrays de búsqueda y reemplazo, contar los reemplazos, str_ireplace sin distinguir mayúsculas y cómo reemplazar solo la primera aparición.

Esta página incluye editores ejecutables: edita, ejecuta y ve el resultado al instante.

str_replace($search, $replace, $subject) devuelve una copia de $subject con cada aparición de $search sustituida por $replace. str_replace('world', 'PHP', 'Hello world') devuelve "Hello PHP".

La función devuelve la cadena nueva; no modifica la variable que le pasas. Asigna el resultado, aunque sea a la misma variable: $text = str_replace(...).

Sintaxis

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

Cada uno de los tres primeros argumentos puede ser una cadena o un array. Si $subject es un array, el reemplazo se aplica a cada elemento y obtienes un array con las mismas claves: str_replace('.txt', '.md', ['a.txt', 'b.txt']) devuelve ['a.md', 'b.md']. La búsqueda distingue mayúsculas y minúsculas y compara texto literal, no patrones. Para patrones usa preg_replace().

Reemplazar varias cadenas a la vez

Pasa arrays en $search y $replace. El primer valor de búsqueda se sustituye por el primer reemplazo, el segundo por el segundo, y así sucesivamente. Si $replace es una sola cadena, todos los valores de búsqueda se sustituyen por ella, que es la forma corta de eliminar un conjunto de caracteres.

La trampa del orden y strtr()

Con arrays, str_replace() aplica un reemplazo tras otro sobre toda la cadena. Una búsqueda posterior puede coincidir con texto que un reemplazo anterior acaba de insertar. strtr() con un array lo reemplaza todo en una sola pasada, prueba primero las claves más largas y nunca toca texto que ya ha reemplazado.

Usa strtr() para intercambios y para marcadores de plantilla que puedan aparecer en los valores.

Contar los reemplazos

El cuarto argumento se rellena con el número de reemplazos hechos. Pasa una variable; PHP escribe en ella.

Reemplazar sin distinguir mayúsculas con str_ireplace

str_ireplace() acepta los mismos argumentos e ignora las mayúsculas al buscar. El reemplazo se inserta exactamente como lo escribiste.

str_ireplace() solo iguala mayúsculas y minúsculas en letras ASCII. Para reemplazar sin distinguir mayúsculas letras con tilde o cirílicas, usa preg_replace() con los modificadores i y u.

Reemplazar solo la primera aparición

str_replace() siempre lo reemplaza todo. Para reemplazar solo la primera coincidencia, encuéntrala con strpos() y córtala con substr_replace():

Para la última aparición, usa strrpos() en lugar de strpos().

Quitar espacios, saltos de línea y otros caracteres

Reemplazar por una cadena vacía elimina el texto. Una limpieza habitual quita los saltos de línea o todos los espacios, y la entrada en japonés suele contener espacios de ancho completo ( , U+3000) que una búsqueda normal de " " no encuentra.

Pon "\r\n" antes de "\n" y "\r" en el array, para que un salto de línea de Windows se convierta en un espacio y no en dos.

Preguntas frecuentes

¿Cómo reemplazo texto en una cadena en PHP?

Usa str_replace($search, $replace, $subject): str_replace('cat', 'dog', 'cat and cat') devuelve "dog and dog". Sustituye todas las apariciones y devuelve una cadena nueva; el original no cambia.

¿str_replace distingue mayúsculas y minúsculas?

Sí. str_replace('php', 'PHP', 'Php') no cambia nada. Usa str_ireplace(), que acepta los mismos argumentos e ignora las mayúsculas.

¿Cómo reemplazo solo la primera aparición en PHP?

str_replace() no tiene argumento de límite. Busca la posición con strpos() y usa substr_replace($s, $replace, $pos, strlen($search)), o usa preg_replace('/' . preg_quote($search, '/') . '/', $replace, $s, 1).

¿Cómo reemplazo varias cadenas a la vez en PHP?

Pasa arrays: str_replace(['a', 'b'], ['1', '2'], $s). Los reemplazos se ejecutan en orden, así que una búsqueda posterior puede coincidir con texto que insertó una anterior. strtr($s, ['a' => '1', 'b' => '2']) lo reemplaza todo en una pasada y nunca vuelve a reemplazar.

¿str_replace funciona con texto japonés?

Sí. str_replace() compara bytes, y un carácter UTF-8 completo nunca coincide dentro de otro carácter, así que str_replace('東京', '大阪', $s) es seguro. No hace falta una versión mb_.

Ilustración de los lenguajes de programación de Coddy

Aprende a programar con Coddy

COMENZAR