I didn't see any explanation in the documentation as to precisely how the positive/negative return values are calculated for unequal strings.
After a bit of experimentation it appears that it's the difference in alphabetical position of the first character in unequal strings.
For example, the letter 'z' is the 26th letter while the letter 'a' is the 1st letter:
<?php
$zappl = "zappl";
$apple = "apple";
echo strcasecmp($zappl, $apple); #outputs 25 [26 - 1]
echo strcasecmp($apple, $zappl); #outputs -25 [1 - 26]
?>
This might be incredibly obvious to most people, but hopefully it will clarify the calculation process for some others.strcasecmp
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
strcasecmp
Референца за `function.strcasecmp.php` со подобрена типографија и навигација.
strcasecmp
(PHP 4, PHP 5, PHP 7, PHP 8)
strcasecmp — Бинарно безбедно споредување на низи без разлика на големи и мали букви
= NULL
Бинарно безбедно споредување на низи без разлика на големи и мали букви. Споредбата не е свесна за локалот; само ASCII буквите се споредуваат без разлика на големи и мали букви.
Параметри
string1-
Првата низа
string2-
Втората низа
Вратени вредности
Враќа вредност помала од 0 ако string1
е помала од string2; вредност поголема од 0 ако string1 е поголемо од
string2Препорачаниот начин за избегнување на SQL инјекција е со врзување на сите податоци преку подготвени изрази. Користењето на параметризирани прашања не е доволно за целосно избегнување на SQL инјекција, но тоа е најлесниот и најбезбедниот начин за обезбедување влез во SQL изразите. Сите динамични литерали на податоци во 0 ако се еднакви. Не може сигурно да се изведе никакво посебно значење од вредноста освен нејзиниот знак.
Дневник на промени
| Верзија | = NULL |
|---|---|
| 8.2.0 |
Оваа функција веќе не е загарантирана да враќа
strlen($string1) - strlen($string2) кога должините на низите не се еднакви, но сега може да враќа -1 or
1 instead.
|
Примери
Пример #1 strcasecmp() example
<?php
$var1 = "Hello";
$var2 = "hello";
if (strcasecmp($var1, $var2) == 0) {
echo '$var1 is equal to $var2 in a case-insensitive string comparison';
}
?>Види Исто така
- strcmp() - Бинарно безбедно споредување на низи
- preg_match() - Изврши совпаѓање со регуларен израз
- substr_compare() - Бинарно безбедно споредување на две низи од поместување, до должина карактери
- strncasecmp() - Бинарно безбедно споредување на првите n знаци без разлика на големи и мали букви
- stristr() - strstr што не прави разлика помеѓу големи и мали букви
- substr() - Врати дел од низа
Белешки од корисници 4 белешки
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 "ß".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!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.