A simple multibyte-safe case-insensitive string comparison:
<?php
function mb_strcasecmp($str1, $str2, $encoding = null) {
if (null === $encoding) { $encoding = mb_internal_encoding(); }
return strcmp(mb_strtoupper($str1, $encoding), mb_strtoupper($str2, $encoding));
}
?>
Caveat: watch out for edge cases like "ß".
strcasecmp
(PHP 4, PHP 5)
strcasecmp — 대소문자 구분 없는 바이너리 안전 문자열 비교
설명
int strcasecmp
( string $str1
, string $str2
)
대소문자 구분 없는 바이너리 안전 문자열 비교입니다.
인수
- str1
-
첫번째 문자열
- str2
-
두번째 문자열
반환값
str1이 str2보다 작다면 < 0을 반환하고; str1이 str2보다 크다면 > 0을 반환합니다. 동일하다면 0을 반환합니다.
예제
Example #1 strcasecmp() 예제
<?php
$var1 = "Hello";
$var2 = "hello";
if (strcasecmp($var1, $var2) == 0) {
echo '대소문자를 구별하지 않는 문자열 비교에서 $var1은 $var2와 동일합니다.';
}
?>
참고
- preg_match() - 정규표현식 매치를 수행
- strcmp() - 바이너리 안전 문자열 비교
- substr() - Return part of a string
- stristr() - 대소문자를 구분하지 않는 strstr
- strncasecmp() - 대소문자 구분 없는 처음 n 문자의 바이너리 안전 문자열 비교
- strstr() - 문자열이 처음으로 나오는 부분을 찾습니다
chris at cmbuckley dot co dot uk
28-Dec-2011 04:59
alvaro at demogracia dot com
29-Jul-2010 05:35
Don't forget this is a single-byte function: in Unicode strings it'll provide incoherent results as soon as both strings differ only in case. There doesn't seem to exist a built-in multi-byte alternative so you need to write your own, taking into account both character encoding and collation.
27-Aug-2002 06:53
The sample above is only true on some platforms that only use a simple 'C' locale, where individual bytes are considered as complete characters that are converted to lowercase before being differentiated.
Other locales (see LC_COLLATE and LC_ALL) use the difference of collation order of characters, where characters may be groups of bytes taken from the input strings, or simply return -1, 0, or 1 as the collation order is not simply defined by comparing individual characters but by more complex rules.
Don't base your code on a specific non null value returned by strcmp() or strcasecmp(): it is not portable. Just consider the sign of the result and be sure to use the correct locale!
