str_replace($search, $replace, $subject) zwraca kopię $subject, w której każde wystąpienie $search jest zastąpione przez $replace. str_replace('world', 'PHP', 'Hello world') zwraca "Hello PHP".
Funkcja zwraca nowy string; nie modyfikuje przekazanej zmiennej. Przypisz wynik, nawet do tej samej zmiennej: $text = str_replace(...).
Składnia
str_replace(
array|string $search,
array|string $replace,
string|array $subject,
int &$count = null
): string|array
Każdy z pierwszych trzech argumentów może być stringiem albo tablicą. Jeśli $subject jest tablicą, zamiana działa na każdym elemencie i dostajesz z powrotem tablicę z tymi samymi kluczami: str_replace('.txt', '.md', ['a.txt', 'b.txt']) zwraca ['a.md', 'b.md']. Wyszukiwanie rozróżnia wielkość liter i dopasowuje zwykły tekst, a nie wzorce. Do wzorców użyj preg_replace().
Zamiana kilku stringów naraz
Przekaż tablice jako $search i $replace. Pierwsza szukana wartość jest zastępowana pierwszym zamiennikiem, druga drugim i tak dalej. Jeśli $replace jest pojedynczym stringiem, zastępuje każdą szukaną wartość, co jest krótkim sposobem na usunięcie zestawu znaków.
Pułapka kolejności i strtr()
Przy tablicach str_replace() wykonuje jedną zamianę po drugiej na całym stringu. Późniejsze wyszukiwanie może trafić w tekst, który właśnie wstawiła wcześniejsza zamiana. strtr() z tablicą zamienia wszystko w jednym przebiegu, najpierw próbuje najdłuższych kluczy i nigdy nie rusza tekstu, który już zamienił.
Używaj strtr() do zamian miejscami i do znaczników w szablonach, które mogą pojawić się w wartościach.
Liczenie zamian
Czwarty argument zostaje wypełniony liczbą wykonanych zamian. Przekaż zmienną; PHP zapisze do niej wynik.
Zamiana bez rozróżniania wielkości liter przez str_ireplace
str_ireplace() przyjmuje te same argumenty i przy dopasowaniu ignoruje wielkość liter. Zamiennik jest wstawiany dokładnie tak, jak go zapisałeś.
str_ireplace() uwzględnia tylko litery ASCII. Do zamiany bez rozróżniania wielkości liter dla liter z akcentami, polskich czy cyrylicy użyj preg_replace() z modyfikatorami i i u.
Zamiana tylko pierwszego wystąpienia
str_replace() zawsze zamienia wszystko. Aby zamienić tylko pierwsze dopasowanie, znajdź je przez strpos() i wytnij przez substr_replace():
Dla ostatniego wystąpienia użyj strrpos() zamiast strpos().
Usuwanie spacji, znaków nowej linii i innych znaków
Zamiana na pusty string usuwa tekst. Częste porządki to usunięcie znaków końca linii albo wszystkich spacji, a japońskie dane często zawierają spacje pełnej szerokości ( , U+3000), których zwykłe wyszukiwanie " " nie dopasuje.
Umieść "\r\n" w tablicy przed "\n" i "\r", aby koniec linii z Windows stał się jedną spacją, a nie dwiema.
Najczęściej zadawane pytania
Jak zamienić tekst w stringu w PHP?
Użyj str_replace($search, $replace, $subject): str_replace('cat', 'dog', 'cat and cat') zwraca "dog and dog". Zamienia każde wystąpienie i zwraca nowy string; oryginał się nie zmienia.
Czy str_replace rozróżnia wielkość liter?
Tak. str_replace('php', 'PHP', 'Php') niczego nie zmienia. Użyj str_ireplace(), który przyjmuje te same argumenty i ignoruje wielkość liter.
Jak zamienić tylko pierwsze wystąpienie w PHP?
str_replace() nie ma argumentu z limitem. Znajdź pozycję przez strpos() i użyj substr_replace($s, $replace, $pos, strlen($search)) albo preg_replace('/' . preg_quote($search, '/') . '/', $replace, $s, 1).
Jak zamienić kilka stringów naraz w PHP?
Przekaż tablice: str_replace(['a', 'b'], ['1', '2'], $s). Zamiany wykonują się po kolei, więc późniejsze wyszukiwanie może trafić w tekst wstawiony przez wcześniejszą zamianę. strtr($s, ['a' => '1', 'b' => '2']) zamienia wszystko w jednym przebiegu i nigdy nie zamienia ponownie.
Czy str_replace działa z japońskim tekstem?
Tak. str_replace() dopasowuje bajty, a kompletny znak UTF-8 nigdy nie pasuje wewnątrz innego znaku, więc str_replace('東京', '大阪', $s) jest bezpieczne. Wersja mb_ nie jest potrzebna. To samo dotyczy polskich znaków.