Menu

str_replace() w PHP: zamiana tekstu w stringu

str_replace($search, $replace, $subject) zastępuje każde wystąpienie $search przez $replace. Poznaj tablice wartości do wyszukania i zamiany, liczenie zamian, str_ireplace bez rozróżniania wielkości liter i zamianę tylko pierwszego wystąpienia.

Na tej stronie są działające edytory: edytuj, uruchamiaj i od razu zobacz wynik.

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.

Ilustracja języków programowania w Coddy

Ucz się programowania z Coddy

ZACZNIJ