PHP 문자열 - 1

Lunar Dev·2024년 7월 8일

PHP

목록 보기
6/7

strlen()

strlen() 함수는 주어진 문자열의 길이를 숫자로 반환하는 함수이다
이 함수가 반환하는 문자열의 길이는 바이트 수 (in bytes)이며,
멀티바이트 문자열(ex: 한글)의 경우 정확한 문자열의 길이를 반환하지 않을 수 있다
이 함수는 영문이나 숫자처럼 멀티바이트가 아닌 문자열의 길이를 확인하는데 사용한다

한글처럼 멀티바이트 문자열의 길이를 확인하려면 mb_strlen() 함수를 사용하자

구문

strlen(string $string): int

매개변수

$string : 길이를 측정하는 문자열

반환 값

$str_1 = 'abcdef1234';
var_dump(strlen($str_1)); // int(10)

/* 공백도 문자열의 길이에 포함 */
$str_2 = 'abc def';
var_dump(strlen($str_2)); // int(7)

$str_3 = ' abc def ';
var_dump(strlen($str_3)); // int(9)

$str_4 = ' ';
var_dump(strlen($str_4)); // int(1)

/* 빈 문자열 */
$str_5 = '';
var_dump(strlen($str_5)); // int(0)

/* 문자열이 아닌 boolean 타입 */
$str_6 = true;
var_dump(strlen($str_6)); // int(1)

$str_7 = false;
var_dump(strlen($str_7)); // int(0)

/* null */
$str_8 = null;
var_dump(strlen($str_8)); // int(0)

매개변수가 문자열이 아닌 boolean 타입일 경우
strlen() 함수는 문자열이 아닌 boolean 타입의 매개변수에 대해서도 동작한다

  • true 는 문자열로 변환했을 때 '1' 로, 바이트 수는 1이다
  • false 는 문자열로 변환했을 때 '' 이므로, 바이트 수는 0이다

매개변수가 문자열이 아닌 null일 경우
strlen() 함수는 문자열이 아닌 null 값의 매개변수에 대해서도 동작한다
null은 문자열로 변환했을 때 빈 문자열 ('') 이므로, 바이트 수는 0이다


매개변수가 한글처럼 멀티바이트 문자열일 경우

$str = '환영합니다.';
var_dump(strlen($str)); // int(16)

$str2 = '환영합니다.';
var_dump(mb_strlen($str2)); // int(6)

mb_strlen()

mb_strlen() 함수는 주어진 문자열의 길이를 숫자로 반환하는 함수이다
이 함수가 반환하는 문자열의 길이는 문자 개수이다,
이 함수는 strlen() 함수와는 달리 멀티바이트 문자열을 지원하기 때문에
한글의 문자열 길이를 확인하는데 매우 유용하다

구문
mb_strlen(string $string, ?string $encoding = null): int

매개변수
$string : 길이를 측정하는 문자열
$encoding : 옵션 / 문자열의 인코딩을 지정

  • 원하는 경우 인코딩을 지정할 수 있다 이 매개변수를 생략하면 문자열의 인코딩은
    내부 설정에 따라 결정된다
  • PHP 8.0.0 버전부터 기본값은 null 이며,
    이 경우 함수는 내부 설정에 따라 기본 인코딩 값을 사용한다
    PHP 8.0.0 버전 이전에서는 기본값이 내부 설정에 따라 결정되었다
  • 인코딩을 알 수 없는 경우 E_WARNING 수준의 오류가 생성된다

반환 값
문자열의 문자 개수를 정수로 반환한다 멀티바이트 문자는 1로 계산된다

⚠️ $encoding 의 값으로 null 은 PHP 8.0.0 버전부터 사용 가능하다
PHP 8.0.0 버전 이전에는 E_WARNING 수준의 오류가 생성된다


ctype_digit()

ctype_digit() 함수는
주어진 문자열이 0 부터 9 까지의 숫자로만 구성되어 있는지 확인하는 함수이다
매개변수로 전달된 문자열이 모두 숫자로 이루어져 있다면
true를 반환하고, 아닐경우 false를 반환한다

  • 공백 문자는 숫자로 판단되지 않는다
  • 빈 문자열('')은 숫자가 아닌 것으로 판단된다
  • '3.14' 와 같은 부동 소수점 숫자(float)은 숫자에 . 부호가 포함되어 있는
    문자열이므로 숫자가 아닌것으로 판단된다
  • '-123' 와 같이 음의 정수와 같이 숫자에 - 등의 부호가 포함되어 있는 문자열은
    숫자가 아닌 것으로 판단된다

구문

ctype_digit(mixed $text): bool

매개변수
$text : 필수 / 모든 문자가 숫자인지 확인할 문자열

반환 값
매개변수로 전달된 문자열이 모두 숫자로 이루어져 있다면 true 를 반환하고,
그렇지 않으면 false 를 반환한다


⚠️ 매개변수로 전달되는 값으로 -128 에서 255 사이의 정수가 제공된 경우,
이는 하나의 문자의 ASCII 값으로 해석된다 즉 해당 정수가 문자열로 변환된다는 의미이다

$x = 65;
var_dump(ctype_digit($x)); // false => 문자열 'A'로 간주된다
$y = 1234;
var_dump(ctype_digit($y)); // true => 문자열 '1234'로 간주된다

PHP 8.1.0 이후에는 ctype_digit() 함수에 문자열이 아닌 인수를 전달하는 것이 불가능하다
이렇듯 의도치 않은 결과를 방지하기 위해 인수를 문자열로 변환해서 사용하자

$x = 65
var_dump(ctype_digit((string)$x)); // true

ctype_digit() 함수는 공백 문자의 경우 숫자로 판단되지 않는다
ctype_digit() 함수를 더 엄격하게 적용하기 위해서는 주어진 문자열에 앞뒤에 공백이
있을 수 있으므로 trim() 함수를 사용하여 앞뒤의 공백을 제거하는 것이 좋다


💡 trim() 함수는 문자열의 양쪽 끝에서 공백 또는 매개변수로 지정된 문자열을 제거하는 함수

$x = ' 65 ';
var_dump(ctype_digit($x)); // false
var_dump(ctype_digit(trim($x))); // true

trim()

trim() : 문자열 앞, 뒤에 있는 공백문자 제거
ltrim() : 문자열 앞에 있는 공백문자 제거
rtrim() : 문자옆 뒤에 있는 공백문자 제거

구문
trim(string $string, string $characters = " \n\r\t\v\x00"): string
ltrim(string $string, string $characters = " \n\r\t\v\x00"): string
rtrim(string $string, string $characters = " \n\r\t\v\x00"): string

매개변수
$string : 필수 / 제거할(trim) 문자열
$characters : 옵션 / 제거할 문자열이다 이 값을 생략하면 다음의 공백문자가 제거된다

  • " " : 공백 문자(Space) - 키보드의 스페이스( Space ) 바를 누르면 입력되는 문자
  • \n : 개행(Newline) - 키보드의 엔터( Enter ) 키를 누를 때 줄바꿈하는 문자
  • \r : 리턴(Carriage return) - 줄(Line)의 시작 위치로 커서를 이동시키는 제어 문자를 가리킨다
    이것은 주로 텍스트에서 줄을 나눌 때 사용되며, 예전에는 프린터 등의 기계에서
    실제로 프린트 헤드를 처음 위치로 되돌리는데 사용되었다
  • \t : 탭(Tab) - 키보드의 탭 ( Tab ) 키를 누르면 입력되는 탭
  • \v : 수직 탭(Vertical tab) - 출력 장치의 수직 탭 위치로 이동하는 제어 문자
  • \x00 : 널 문자(NUL-byte) - 문자열의 끝을 나타내는 데 사용

반환 값
문자열의 양쪽 끝에서 공백 또는 매개변수로 지정된 문자열을 제거(trim)한 문자열을 반환한다
⚠️ 한글과 같은 multi-byte 문자열을 지원하지 않는다
한글과 같은 multi-byte 문자열을 지원하지 않는 번거로움으로 인해
trim() 함수는 매개변수로 지정된 문자열을 제거하기 보다는 공백(문자)를 제거하는데 주로 사용된다

$str = ' hello world ';
$trimmedStr = trim($str);
var_dump($trimmedStr); // 출력: 'hello world'

substr()

substr() 함수는 문자열에서 주어진 특정 위치부터 특정 길이만큼의 문자열을 추출하는 함수

echo substr('Hello World!', 6, 5); // World
// 'Hello World!' 문자열의 7번 째부터 5개의 문자열을 추출한다 (0번째 부터)

구문
substr(string $string, int $start, int|null $length = null): string|false

매개변수
$string : 필수 / 추출하고자 하는 원본 문자열
$start : 필수 / 추출을 시작할 위치
0부터 시작하여 문자열의 첫 번째 문자는 0번 인덱스이다. 음수 값을 사용하는 경우,
문자열의 끝에서부터 역으로 카운트하게 된다
예를 들어, -1은 문자열의 마지막 문자를 나타내며, -2는 끝에서 두 번째 문자를 나타낸다
$length : 옵션 / 추출할 문자열의 길이
기본 값은 null 이며, 이 경우 시작 위치부터 문자열의 끝까지 모든 문자를 추출한다

반환 값
substr() 함수는 성공적으로 부분 문자열을 추출할 경우 해당 부분 문자열을 반환한다

  • PHP 8.0.0 이전에는 실패할 경우 false 를 반환한다

  • PHP 8.0.0 이후에는 실패할 경우 빈 문자열 ( '' ) 을 반환한다
    이로써 반환 값의 일관성을 유지하고 오류 처리를 예측 가능하게 만든다

  • $length 매개변수가 null 일 경우

    • PHP 8.0.0 이전에서는 빈 문자열 ( '' ) 을 반환한다
    • PHP 8.0.0 버전부터는 $length 를 명시적으로 null 로 설정할 수 있게 변경되었다
      $length 매개 변수를 명시적으로 null 로 설정하면 문자열 끝에서 끝나는 부분 문자열 반환

⚠️ sub_str() 함수를 사용할 때 한글 문자열의 인코딩 문제가 발생할 수 있다
이는 UTF-8과 같은 멀티바이트 문자 인코딩을 사용하는 경우에 주로 발생하는 문제이다
이러한 문제를 해결하기 위해서는 mb_substr() 함수를 사용하여 제대로 자를 수 있다


mb_substr()

mb_substr() 함수는 문자열에서 특정 위치부터 특정 길이만큼의 문자열을 추출하는
substr() 함수의 한글의 인코딩 문제를 해결해주는 함수이다

echo substr('반갑습니다. 환영합니다.', 7, 5); // ��니
echo mb_substr('반갑습니다. 환영합니다.', 7, 5); // 환영합니다

구문

mb_substr
(string $string
  , int $start
  , int|null $length = null
  , string|null
  $encoding = null
): string

매개변수

$string : 필수 / 추출하고자 하는 원본 문자열
$start : 필수 / 추출을 시작할 위치
0부터 시작하여 문자열의 첫 번째 문자는 0번 인덱스이다
음수 값을 사용하는 경우, 문자열의 끝에서부터 역으로 카운트하게 된다
예를 들어, -1은 문자열의 마지막 문자를 나타내며, -2는 끝에서 두 번째 문자를 나타낸다
$length : 옵션 / 추출할 문자열의 최대 길이입니다.
기본 값은 null이며, 이 경우 시작 위치부터 문자열의 끝까지 모든 문자를 추출한다
$encoding : 옵션 / 문자열의 인코딩을 지정한다
기본 값은 null이며, UTF-8과 같은 표준 인코딩을 사용할 경우에는 별도로 지정하지 않아도 된다
생략하거나 null이면 내부 문자 인코딩 값이 사용된다

반환 값
mb_substr() 함수는 성공적으로 부분 문자열을 추출한 경우 해당 문자열을 반환한다


⚠️ substr() 함수는 실패할 경우 false 를 반환하지만,
mb_substr() 함수는 실패할 경우 반환하는 값이 없고 null 이다.


str_replace()

str_replace() 함수는 문자열에서 특정 문자열을 검색해서 다른 문자열로 바꾸는 함수

$str = 'Hello, World!';
$newStr = str_replace('World!', 'Universe!', $str);
echo $newStr; // Hello, Universe!

💡 지정된 고정된 문자열로 검색하는 대신
패턴을 기반으로 검색해서 텍스트를 대체하려면 preg_replace() 를 사용하자

구문

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

// str_replace(찾을 문자열, 바꿀 문자열, 대상 문자열[,카운트]);

매개변수

$search : 필수 / 대상 문자열에서 바꾸고자 하는 문자열 또는 문자열 배열을 지정
$replace : 필수 / $search 를 대체할 새로운 문자열 또는 문자열 배열을 지정
$subject : 필수 / 대상이 되는 문자열 또는 문자열 배열을 지정
                         $search 를 이 문자열 안에서 찾아서 $replace 로 대체한다
$count : 옵션 / 대체 작업의 횟수를 저장하기 위한 변수
기본 값은 null 이다 str_replace() 함수가 호출 될 때, 이 변수에 대체 작업 횟수가 저장된다

💡 str_replace() 함수는 대소문자를 구분한다 대소문자를 구분하지 않으려면 str_ireplace() 사용

반환 값
str_replace() 함수는 대체 작업이 수행된 후에 대상 문자열 또는 대상 문자열 배열을 반환한다
함수는 대체 작업이 수행된 후에 대상 문자열 또는 대상 문자열 배열을 반환한다


str_replace() 함수에 배열을 이용해서 여러 개의 문자열을 대체

$originalArray = array
('Apples are red.',
'Bananas are yellow.',
'Apples and bananas are delicious.')

$search = array('Apples', 'Bananas');
$replace = array('Oranges', 'Grapes');

$newArray = str_replace($search, $replace, $originalArray);

print_r($newArray);

/* 출력:
Array
(
    [0] => Oranges are red.
    [1] => Grapes are yellow.
    [2] => Oranges and grapes are delicious.
)
*/

문자열의 문자열을 검색해서 대체

$originalString = 'Apples are red. Bananas are yellow. Apples and bananas are delicious.';

$search = array('Apples', 'Bananas');
$replace = array('Oranges', 'Grapes');

$newString = str_replace($search, $replace, $originalString);

echo $newString;

// 출력: 'Oranges are red. Grapes are yellow. Oranges and grapes are delicious.'

$count 파라미터를 사용

$count 파라미터는 str_replace() 함수의 대체 작업의 횟수를 저장하기 위한 변수이며 옵션이다
기본 값은 null이고 str_replace() 함수가 호출될 때, 이 변수에 대체 작업 횟수가 저장된다

$count 파라미터를 사용하는 유용한 사례 중 하나는 특정 문자열이나 패턴의 반복 횟수를 세는 것이다
이를 통해 문자열 내에서 특정 패턴이 얼마나 자주 나타나는지를 파악할 수 있다

$originalString = '안녕하세요, 세상! 안녕하세요, PHP! 안녕하세요, 모두!';
$search = '안녕하세요';
$replace = '안녕';
$count = 0;

$newString = str_replace($search, $replace, $originalString, $count);

echo $newString; // 출력 : '안녕, 세상! 안녕, PHP!, 안녕, 모두!';
echo $count; // 3

str_split()

str_split() 함수는
문자열을 원하는 일정한 길이의 부분 문자열로 분할하여 배열로 변환하는 함수

$str = 'Hello World!';

$arr1 = str_spilt($str, 1); // 문자열의 길이를 1만큼으로 분할
$arr2 = str_spilt($str, 3); // 문자열의 길이를 3만큼으로 분할

print_r($arr1);

/* 출력:
	Array (
		[0] => H
		[1] => e
		[2] => l
		[3] => l
		[4] => o
		[5] =>
		[6] => W
		[7] => o
		[8] => r
		[9] => l
		[10] => d
		[11] => !
	)
*/

print_r($arr2);
/* 출력:
	Array (
		[0] => Hel
		[1] => lo
		[2] => Wor
		[3] => ld!
	)
*/

구문

str_split(string $string, int $length = 1): array

매개변수

$string : 필수 / 분할할 대상 문자열
$length : 옵션 / 각 부분 문자열의 길이를 지정하는 매개변수이다
이 매개변수를 사용하지 않으면 기본값으로 각 문자를 하나의 요소로 하는 배열이 생성된다

반환 값

매개변수로 전달된 $length 길이의 부분 문자열로 분할하여 배열로 변환해서 반환한다

💡 이때 길이의 크기는 1byte 기준이다 즉, 한글과 같은 multi-byte 문자열을 지원하지 않는다
mb_str_spilt() 함수는 multi-byte 문자열을 지원한다


  • PHP 8.2.0 이전에는 분할할 대상 문자열이 빈 문자열( '' ) 일 경우 빈 배열을 반환하지만
    8.2.0 부터는 빈 문자열을 반환한다
  • PHP 8.0.0 이전에는 각 부분 문자열의 길이를 지정하는 매개변수가 1 보다 작을 경우
    false를 반환했지만 8.0.0 부터는 ValueError가 발생한다

활용 예제

  • 역순 출력
$str = 'Hello';
$array = str_spilt($str);
$reversed_array = array_reverse($array);
$reversed_string = implode('', $reversed_array);

echo $reversed_string; // 출력 : 'olleH';
  • 정보 숨기기
$personal_id = '123456-1234567';
$array = str_split($personal_id);
$array_length = count($array);

for($i = 7; $i < array_length; $i++) {
	$array[$i] = '*';
}

$masked_id = implode('', $array);
$echo $masked_id; // 출력 : '123456-*******'

mb_str_split()

mb_str_split() 함수는
한글과 같은 multi-byte 문자열을 원하는 길이의 부분 문자열로 분할하여 배열로 반환하는 함수

구문

mb_str_split(string $string, int $length = 1, ?string $encoding = null): array

매개변수

$string : 필수 / 분할할 대상 문자열
$length : 옵션 / 각 부분 문자열의 길이를 지정하는 매개변수이다
이 매개변수를 사용하지 않으면 기본값으로 각 문자를 하나의 요소로 하는 배열이 생성된다
$encoding : 옵션 / 문자열 인코딩을 지정한다 이 매개변수가 생략되거나 null 일 경우
내부 문자 인코딩 값이 사용된다 그리고 이 매개변수는 지원되는 인코딩 중 하나를 나타내는
문자열을 지정할 수 있다

반환 값

매개변수로 전달된 $length 길이의 부분 문자열로 분할하여 배열로 변환해서 반환한다


  • PHP 8.0.0 부터 $encoding 매개변수가 이제 nullable 하게 변경되었다
    이것은 이제 encoding 매개변수를 생략하거나 null 로 설정할 수 있음을 의미한다
    이전에는 반드시 유효한 인코딩을 지정해야 했다
  • PHP 8.0.0 부터 함수가 실패할 경우 더 이상 false 를 반환하지 않는다
    이전에는 함수가 실패할 때 false 를 반환했지만, 이제는 실패한 경우에도 반환 값이
    false 가 아니다 대신에 함수는 항상 배열을 반환하게 된다 실패한 경우에는
    빈 배열이 반환된다

explode()

explode() 함수는 문자열을 특정 구분자를 기준으로 나누어 배열로 반환하는 함수
implode() 함수는 배열을 특정 구분자를 기준으로 합친 문자열을 반환하는 함수

$fruits = explode(',' , 'apple,banana,orange');
print_r($fruits);

/* 출력:
Array
(
    [0] => apple
    [1] => banana
    [2] => orange
)
*/

$str = implode('/', $fruits);
echo $str; 
// 출력 : apple/banana/orange

구문

explode(string $delimiter, string $string, int $limit = PHP_INT_MAX): array
implode(string $separator, array $array): string

매개변수

$delimiter : 입력 문자열을 나눌 구분자
$string : 나눌 대상의 원본 문자열
$limit : 나눌 최대 수, 이 인자를 생략하면 기본적으로
배열의 크기가 제한 없이 구분자에 따라 문자열이 나누어진다

반환 값

explode() 함수는 문자열을 구분자로 나누어 배열로만들고, 그 결과로 나온 배열을 반환한다

💡 매개변수와 반환 값 관계

  • PHP 8.0.0 버전 이전에는 구분자 파라미터로 빈 문자열 ( '' )을 제공했을 때
    explode() 함수가 false 를 반환했다
  • PHP 8.0.0 버전부터는 이러한 경우에 ValueError 를 발생시키도록 변경됐다

⚠️ 빈 문자열( '' )구분자로 지정했을 경우 PHP 설정에 따라서는 Waring 에러가 발생할 수 있다

활용 예제

  • 구분자가 원본 문자열의 처음이나 끝에 있는 경우
$sentence1 = ',반갑습니다. 환영합니다!';
$sentence2 = '반갑습니다. 환영합니다!,';

$words_array1 = explode(',' , $sentence1);
$words_array2 = explode(',' , $sentence2);

var_dump($words_array1);
// array(2) { [0]=> string(0) "" [1]=> string(33) "반갑습니다. 환영합니다!" }
var_dump($words_array2);
// array(2) { [0]=> string(33) "반갑습니다. 환영합니다!" [1]=> string(0) "" }

  • 쿼리 스트링 추출
$url = 'https://www.example.com/products?category=electronics&page=1';
$parts = explode('?', $url);

$path = $parts[0];
$query_string = $parts[1];

echo $path; // 출력 : https://www.example.com/products
echo $query_string; // 출력 : category=electronics&page=1

  • 문자열 파싱
$time = '13:55:58';
$timeParts = explode(':' , $time);
$hours = $timeParts[0];
echo $hours; // 출력 : 13

⚠️ 주의사항

  • 구분자가 있는지 확인 :
    explode() 함수를 사용하기 전에 문자열에 구분자가 있는지 먼저 확인하자
    구분자가 없는 경우에도 explode() 는 원래 문자열을 하나의 요소로 간주하므로 조심해야한다
  • 구분자가 연속적으로 나타날 경우 처리 :
    만약 구분자가 연속적으로 나타나는 경우 빈 문자열이 배열에 추가될 수 있다
    이런 경우 결과적으로 빈 값을 다루게 될 수 있으므로 주의해야한다
  • 대소문자 구분 :
    explode() 함수는 대소문자를 구분한다
    구분자를 기준으로 나눌 때 대소문자가 일치하는지 확인하자
  • 메모리 사용 :
    큰 문자열을 처리할 때 explode() 함수는 메모리 사용에 영향을 미칠 수 있다
    큰 문자열을 처리해야 하는 경우 메모리 사용을 최적화 하기 위해 다른 방법을 고려하자

strpos()

strpos() 함수는 문자열에서 특정 문자열의 위치를 찾는 함수
대상 문자열에서 주어진 문자열이 처음 나타나는 위치(인덱스)를 반환한다
주어진 문자열이 포함되어 있지 않으면 false 를 반환한다 대소문자를 구분한다

$str = 'Hello, World!';
$substring = 'World';

$pos = strpos($str, $substring);

if($pos !== false) {
	echo "찾은 위치 : $pos";
}else {
	echo '찾을 수 없습니다.';
}

// 출력: 찾은 위치: 7

구문

strpos(string $haystack, string $needle, int $offset = 0): int|false

매개변수

$haystack : 검색 대상이 되는 문자열
$needle : 검색할 문자열

  • 대소문자를 구분한다
  • PHP 8 이전의 버전에서는 빈 문자열 ( '' )을 허용하지 않는다 Warning 에러 발생

$offset : 옵션 / 검색을 시작할 0 기반의 인덱스

  • 생략하면 기본값으로 0이 사용된다
  • 음수 값을 사용할 수 있으며, 음수인 경우 문자열 끝부터 계산된 문자 수만큼 검색이 시작된다

반환 값

대상 문자열에서 주어진 문자열( $needle )이 처음 나타나는 위치(인덱스)를 반환한다
문자열 위치(인덱스)는 1이 아닌 0부터 시작한다는 점에 유의하자

주어진 문자열에 ( $needle )이 포함되어 있지 않으면 false 를 반환한다

⚠️ 주의사항
strpos() 함수는 대소문자를 구분한다


strpos() 함수에 한글을 적용할 경우,
한글과 같은 multi-byte 문자열을 지원하지 않아 원하지 않는 결과가 발생한다
multi-byte 문자열에서는 mb_strpos() 함수를 사용하자

$str = 'Hello, World!';
$substring = 'world';

$pos = strpos($str, $substring);

if ($pos === false) {
    echo "대소문자가 일치하지 않아 'world!'를 찾을 수 없습니다.";
} else {
    echo "문자열에 'world!'가 포함되어 있습니다.";
}

// 출력: "대소문자가 일치하지 않아 'world!'를 찾을 수 없습니다."

활용 예제

  • 파일 시스템 및 경로
$file_path = '/var/www/html/project/files/document.txt';
$directory_name = '`/var/www/html/project';

if(strpos($file_path, $directory_name) !== false) {
	echo '파일은 지정된 디렉토리에 속해 있음';
}else {
	echo '파일은 지정된 디렉토리에 속해 있지 않음';
}

// 출력: '파일은 지정된 디렉토리에 속해 있습니다.'

$file_name = substr($file_path, strrpos($file_path, '/') + 1);
echo "파일 이름: $file_name";

// 출력: "파일 이름: document.txt"

strrpos() 는 오른쪽에서 부터 검색한다


mb_strpos()

mb_strpos() 함수는 문자열에서 특정 문자열의 위치를 찾는 함수

구문

mb_strpos(
    string $haystack,
    string $needle,
    int $offset = 0,
    ?string $encoding = null
): int|false

매개변수

$haystack : 검색 대상이 되는 문자열
$needle : 검색할 문자열

  • 대소문자를 구분한다
  • PHP 8 이전의 버전에서는 빈 문자열 ( '' )을 허용하지 않는다 Warning 에러 발생

$offset : 옵션 / 검색을 시작할 0 기반의 인덱스

  • 생략하면 기본값으로 0이 사용된다
  • 음수 값을 사용할 수 있으며, 음수인 경우 문자열 끝부터 계산된 문자 수만큼 검색이 시작된다

$encoding : 옵션 / 문자열의 인코딩을 지정한다
기본 값은 null 이며, UTF-8과 같은 표준 인코딩을 사용할 경우에는 별도로 지정하지 않아도 된다
생략하거나 null 이면 내부 문자 인코딩 값이 사용된다


stripos()

stripos() 함수는 문자열에서 특정 문자열의 위치를 찾는 함수
대상 문자열에서 주어진 문자열이 처음 나타나는 위치(인덱스)를 반환합니다. 주어진 문자열이 포함되어 있지 않으면 false를 반환한다 대소문자를 구분하지 않는다

구문

stripos(string $haystack, string $needle, int $offset = 0): int|false

매개변수

$haystack : 검색 대상이 되는 문자열
$needle : 검색할 문자열 대소문자를 구분하지 않는다
$offset : 옵션 / 검색을 시작할 0 기반의 인덱스

  • 생략하면 기본값으로 0이 사용된다
  • 음수 값을 사용할 수 있으며, 음수인 경우 문자열 끝부터 계산된 문자 수만큼 검색이 시작된다

반환 값

대상 문자열에서 주어진 문자열( $needle )이 처음 나타나는 위치(인덱스)를 반환한다
문자열 위치(인덱스)는 1이 아닌 0부터 시작한다는 점에 유의하자

  • 주어진 문자열에 ( $needle )이 포함되어 있지 않으면 false 를 반환한다
  • 주어진 문자열에 ( $needle )이 빈 문자열('')일 경우 false 를 반환한다

mb_stripos()

stripos() 함수는 문자열에서 특정 문자열의 위치를 찾는 함수

구문

mb_stripos(
    string $haystack,
    string $needle,
    int $offset = 0,
    ?string $encoding = null
): int|false

매개변수

$haystack : 검색 대상이 되는 문자열
$needle : 검색할 문자열

  • 대소문자를 구분하지 않는다
  • PHP 8 이전의 버전에서는 빈 문자열 ( '' )을 허용하지 않는다 Warning 에러 발생

$offset : 옵션 / 검색을 시작할 0 기반의 인덱스

  • 생략하면 기본값으로 0이 사용된다
  • 음수 값을 사용할 수 있으며, 음수인 경우 문자열 끝부터 계산된 문자 수만큼 검색이 시작된다

$encoding : 옵션 / 문자열의 인코딩을 지정한다
기본 값은 null 이며, UTF-8과 같은 표준 인코딩을 사용할 경우에는 별도로 지정하지 않아도 된다
생략하거나 null 이면 내부 문자 인코딩 값이 사용된다

반환 값

대상 문자열에서 주어진 문자열( $needle )이 처음 나타나는 위치(인덱스)를 반환한다
문자열 위치(인덱스)는 1이 아닌 0부터 시작한다는 점에 유의하자

주어진 문자열($needle)이 포함되어 있지 않으면 false를 반환한다


str_contains()

str_contains() 함수는 문자열에 특정 문자열이 포함하는지 확인하는 함수
문자열에서 주어진 문자열이 포함되어 있으면 true 를 그렇지 않으면 false 를 반환한다

  • 대소문자를 구분한다
  • PHP 8에서 도입된 함수로 PHP 8 이전의 버전에서는 호환되지 않는다
    • PHP 8 이전의 버전에서 포함 여부를 확인하려면 strpos() 를 활용하자
$haystack = '반가워요! 코딩하고싶어요';
$needle = '코딩';
``ltrim(string $string, string $characters = " \n\r\t\v\x00"): string``

if(str_contains($haystack, $needle)) {
	echo "문자열에 '$needle' 이 포함되어 있음";
}else {
	echo "문자열에 '$needle' 이 포함되어 있지 않음";
}

// 출력: "문자열에 '코딩'이 포함되어 있음"

구문

str_contains(string $haystack, string $needle): bool

매개변수

$haystack : 검색 대상이 되는 문자열
$needle : 검색할 문자열 대소문자를 구분한다

반환 값
검색 대상이 되는 문자열에서
검색할 주어진 문자열이 포함되어 있으면 true를 그렇지 않으면 false를 반환한다
검색할 주어진 문자는 대소문자를 구분한다

검색할 문자열이 빈 문자열 ( '' )일 경우
빈 문자열 ( '' )이 있는지 확인하면 항상 true가 반환된다

활용 예제

  • 검색 기능
$search = '사과';
$text = '나는 사과와 바나나를 좋아한다';

if(str_contains($text, $search)) {
	echo "$search 단어가 포함되어 있다";
}else {
	echo "$search 단어가 포함되어 있지 않다";
}

// 출력 : "'사과' 단어가 포함되어 있다"
  • 문자열 필터링
$content = '이 문장에는 원치 않는 단어가 포함되어 있다';
$unwantedWords = array('원치 않는', '나쁜', '부적절한');

foreach($unwantedWords as $word) {
	if(str_contains($content, $word)) {
    	echo '필터링 되었음';
        break;
    }
}
// 출력 : 필터링 되었음
profile
저장소

0개의 댓글