Menu

PHP 문자열 치환 str_replace(): 사용법과 예제

str_replace($search, $replace, $subject)는 $search가 나오는 모든 곳을 $replace로 바꿉니다. 검색값과 치환값 배열, 치환 횟수 세기, 대소문자를 무시하는 str_ireplace, 첫 번째 일치만 바꾸기를 알아봅니다.

이 페이지에는 실행 가능한 에디터가 있습니다 - 편집하고 실행하면 결과를 바로 볼 수 있습니다.

str_replace($search, $replace, $subject)는 $search가 나오는 모든 곳을 $replace로 바꾼 $subject의 복사본을 반환합니다. str_replace('world', 'PHP', 'Hello world')는 "Hello PHP"를 반환합니다.

이 함수는 새 문자열을 반환하며, 넘긴 변수를 수정하지 않습니다. 같은 변수에 다시 넣더라도 결과를 대입하세요: $text = str_replace(...).

문법

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

처음 세 인수는 각각 문자열이나 배열일 수 있습니다. $subject가 배열이면 모든 요소에 치환이 실행되고 같은 키를 가진 배열이 돌아옵니다: str_replace('.txt', '.md', ['a.txt', 'b.txt'])는 ['a.md', 'b.md']를 반환합니다. 검색은 대소문자를 구분하며 패턴이 아니라 일반 텍스트와 일치합니다. 패턴에는 preg_replace()를 쓰세요.

여러 문자열을 한 번에 바꾸기

$search와 $replace에 배열을 넘기세요. 첫 번째 검색값은 첫 번째 치환값으로, 두 번째는 두 번째로 바뀌는 식입니다. $replace가 문자열 하나라면 모든 검색값이 그것으로 바뀌며, 문자 집합을 제거하는 짧은 방법입니다.

순서 함정과 strtr()

배열을 쓰면 str_replace()는 문자열 전체에 대해 치환을 하나씩 차례로 실행합니다. 나중 검색값이 앞의 치환이 방금 삽입한 텍스트와 일치할 수 있습니다. 배열과 함께 쓰는 strtr()는 한 번에 모두 바꾸고, 긴 키부터 시도하며, 이미 바꾼 텍스트는 건드리지 않습니다.

값을 맞바꿀 때나 값 안에 나타날 수 있는 템플릿 자리 표시자에는 strtr()를 쓰세요.

치환 횟수 세기

네 번째 인수에는 치환한 횟수가 채워집니다. 변수를 넘기면 PHP가 거기에 씁니다.

str_ireplace로 대소문자 무시하고 바꾸기

str_ireplace()는 같은 인수를 받고 일치를 찾을 때 대소문자를 무시합니다. 치환값은 쓴 그대로 삽입됩니다.

str_ireplace()는 ASCII 문자만 대소문자를 맞춥니다. 악센트가 있는 문자나 키릴 문자를 대소문자 무시로 바꾸려면 i와 u 수식어를 붙인 preg_replace()를 쓰세요.

첫 번째 일치만 바꾸기

str_replace()는 항상 모두 바꿉니다. 첫 번째 일치만 바꾸려면 strpos()로 찾고 substr_replace()로 잘라 바꾸세요.

마지막 일치에는 strpos() 대신 strrpos()를 쓰세요.

공백, 줄바꿈 등 문자 제거하기

빈 문자열로 바꾸면 텍스트가 제거됩니다. 흔한 정리 작업은 줄바꿈이나 모든 공백을 지우는 것이며, 일본어 입력에는 일반 " " 검색과 일치하지 않는 전각 공백( , U+3000)이 들어 있는 경우가 많습니다.

배열에서 "\r\n"을 "\n"과 "\r"보다 앞에 두세요. 그래야 Windows 줄바꿈이 공백 두 개가 아니라 하나가 됩니다.

자주 묻는 질문

PHP에서 문자열의 텍스트를 바꾸려면 어떻게 하나요?

str_replace($search, $replace, $subject)를 쓰세요: str_replace('cat', 'dog', 'cat and cat')은 "dog and dog"를 반환합니다. 모든 일치를 바꾸고 새 문자열을 반환하며, 원본은 바뀌지 않습니다.

str_replace는 대소문자를 구분하나요?

네. str_replace('php', 'PHP', 'Php')는 아무것도 바꾸지 않습니다. 같은 인수를 받고 대소문자를 무시하는 str_ireplace()를 쓰세요.

PHP에서 첫 번째 일치만 바꾸려면 어떻게 하나요?

str_replace()에는 횟수 제한 인수가 없습니다. strpos()로 위치를 찾고 substr_replace($s, $replace, $pos, strlen($search))를 쓰거나, preg_replace('/' . preg_quote($search, '/') . '/', $replace, $s, 1)을 쓰세요.

PHP에서 여러 문자열을 한 번에 바꾸려면 어떻게 하나요?

배열을 넘기세요: str_replace(['a', 'b'], ['1', '2'], $s). 치환은 순서대로 실행되므로 나중 검색값이 앞에서 삽입된 텍스트와 일치할 수 있습니다. strtr($s, ['a' => '1', 'b' => '2'])는 한 번에 모두 바꾸며 다시 치환하지 않습니다.

str_replace는 한글이나 일본어 텍스트에서도 동작하나요?

네. str_replace()는 바이트를 비교하며, 온전한 UTF-8 문자는 다른 문자 안에서 일치하지 않으므로 str_replace('東京', '大阪', $s)는 안전합니다. mb_ 버전이 필요 없습니다.

Coddy 프로그래밍 언어 일러스트

Coddy로 코딩 배우기

시작하기