Что такое код strcoll


FPublisher

Web-технологии: База знаний

Документация PHP

strcoll

(PHP 4 >= 4.0.5, PHP 5)

strcoll — Сравнение строк с учетом текущей локали

Описание

int strcoll ( string $str1 , string $str2 )

Возвращает положительное число если str1 меньше, чем str2 ; отрицательное число если str1 больше, чем str2 , и 0 если строки равны. strcoll() при сравнении использует установки текущей локали. Если установлена локаль C или POSIX, эта функция аналогична strcmp().

Обратите внимание, что эта функция учитывает регистр символов, и, в отличие от strcmp() не безопасна для обработки данных в двоичной форме.

Замечание: strcoll() была добавлена в PHP 4.0.5, но под Windows не была включена до версии 4.2.3.

Что такое код strcoll

(PHP 4 >= 4.0.5, PHP 5)

strcoll — Сравнение строк с учетом текущей локали

Описание int strcoll ( string str1, string str2 )

Возвращает положительное число если str1 меньше, чем str2 ; отрицательное число если str1 больше, чем str2 , и 0 если строки равны. strcoll() при сравнении использует установки текущей локали. Если установлена локаль C или POSIX, эта функция аналогична strcmp() .

Обратите внимание, что эта функция учитывает регистр символов, и, в отличие от strcmp() не безопасна для обработки данных в двоичной форме.

Замечание: strcoll() была добавлена в PHP 4.0.5, но под Windows не была включена до версии 4.2.3.

Linux.yaroslavl.ru

Учебник РНР
Назад Вперёд

strcoll — сравнение строк на основе локализации.

Описание

int strcoll ( string str1, string str2)

Возвращает str1 меньше str2 ; > 0, если str1 больше str2 , и 0, если они равны. strcoll() использует текущую locale для выполнения сравнения. Если текущая locale равна C или POSIX, эта функция эквивалентна strcmp() .

Это сравнение с учётом регистра и, в отличие от strcmp() , эта функция бинарно не безопасна.

Функции strcoll strcoll Functions

Каждая из функций strcoll и wcscoll сравнивает две строки согласно параметру категории LC_COLLATE кодовой страницы использующегося языкового стандарта. Each of the strcoll and wcscoll functions compares two strings according to the LC_COLLATE category setting of the locale code page currently in use. Каждая из функций _mbscoll сравнивает две строки в соответствии с использующейся многобайтовой кодовой страницей. Each of the _mbscoll functions compares two strings according to the multibyte code page currently in use. Используйте функции coll для сравнения строк, когда есть различие между порядком символов в наборе и лексикографическим порядком символов в текущей кодовой странице и данное различие представляет интерес во время сравнения строк. Use the coll functions for string comparisons when there is a difference between the character set order and the lexicographic character order in the current code page and this difference is of interest for the comparison. Используйте соответствующие функции cmp для выполнения проверки только на равенство строк. Use the corresponding cmp functions to test only for string equality.

Функции strcoll strcoll Functions

однобайтовая кодировка SBCS Юникод Unicode MBCS MBCS ОПИСАНИЕ Description
strcoll strcoll wcscoll wcscoll _mbscoll _mbscoll Сопоставить две строки Collate two strings
_stricoll _stricoll _wcsicoll _wcsicoll _mbsicoll _mbsicoll Сопоставить две строки (регистр не учитывается) Collate two strings (case insensitive)
_strncoll _strncoll _wcsncoll _wcsncoll _mbsncoll _mbsncoll Сопоставить первые count символов двух строк Collate first count characters of two strings
_strnicoll _strnicoll _wcsnicoll _wcsnicoll _mbsnicoll _mbsnicoll Сопоставить первые count символов двух строк (регистр не учитывается) Collate first count characters of two strings (case-insensitive)

Примечания Remarks

Версии этих функций для однобайтовых символов (SBCS) ( strcoll , stricoll , _strncoll и _strnicoll ) сравнивают string1 и string2 согласно параметру категории LC_COLLATE текущего языкового стандарта. The single-byte character (SBCS) versions of these functions ( strcoll , stricoll , _strncoll , and _strnicoll ) compare string1 and string2 according to the LC_COLLATE category setting of the current locale. Эти функции отличаются от соответствующих функций strcmp тем, что функции strcoll используют сведения кодовой страницы языкового стандарта, предоставляющие последовательности сопоставления. These functions differ from the corresponding strcmp functions in that the strcoll functions use locale code page information that provides collating sequences. Для сравнения строк в языковых стандартах, где порядок символов в наборе отличается от лексикографического порядка, функции strcoll необходимо использовать вместо соответствующих функций strcmp . For string comparisons in locales in which the character set order and the lexicographic character order differ, the strcoll functions should be used rather than the corresponding strcmp functions. Дополнительные сведения по LC_COLLATE см. в разделе setlocale. For more information on LC_COLLATE , see setlocale.

Для некоторых кодовых страниц и соответствующих наборов символов порядок символов в наборе может отличаться от лексикографического порядка символов. For some code pages and corresponding character sets, the order of characters in the character set may differ from the lexicographic character order. Языковой стандарт «C» не входит в их число: порядок символов в кодировке ASCII совпадает с лексикографическим порядком символов. In the «C» locale, this is not the case: the order of characters in the ASCII character set is the same as the lexicographic order of the characters. Однако, в некоторых европейских языковых стандартах, например, символ «a» (значение 0x61) предшествует символу «ä» (значение 0xE4) в кодировке, но «ä» предшествует символу «a» лексикографически. However, in certain European code pages, for example, the character ‘a’ (value 0x61) precedes the character ‘ä’ (value 0xE4) in the character set, but the character ‘ä’ precedes the character ‘a’ lexicographically. Чтобы выполнить лексикографическое сравнение в таком случае, используйте strcoll вместо strcmp . To perform a lexicographic comparison in such an instance, use strcoll rather than strcmp . Также можно использовать функцию strxfrm для исходных строк, а затем использовать функцию strcmp для результирующих строк. Alternatively, you can use strxfrm on the original strings, then use strcmp on the resulting strings.

strcoll , stricoll , _strncoll и _strnicoll автоматически обрабатывают строки многобайтовых символов в соответствии с текущей кодовой страницей языкового стандарта, так же ведут себя их аналоги, работающие с расширенными (Юникод) символами. strcoll , stricoll , _strncoll , and _strnicoll automatically handle multibyte-character strings according to the locale code page currently in use, as do their wide-character (Unicode) counterparts. Версии этих функций, работающие с многобайтовыми символами (MBCS), однако, сопоставляют строки посимвольно согласно текущей многобайтовой кодовой странице. The multibyte-character (MBCS) versions of these functions, however, collate strings on a character basis according to the multibyte code page currently in use.

Поскольку функции coll сопоставляют строки для лексикографического сравнения, тогда как функции cmp просто проверяют на равенство строк, функции coll гораздо медленнее, чем соответствующие версии cmp . Because the coll functions collate strings lexicographically for comparison, whereas the cmp functions simply test for string equality, the coll functions are much slower than the corresponding cmp versions. Таким образом, функции coll следует использовать только в том случае, когда есть различие между порядком символов в наборе и лексикографическим порядке символов в текущей кодовой странице и данное различие представляет интерес во время сравнения строк. Therefore, the coll functions should be used only when there is a difference between the character set order and the lexicographic character order in the current code page and this difference is of interest for the string comparison.

Вопрос по api, php, rest, authentication, javascript &#8211 Авторизация и аутентификация в REST API из JavaScript-клиента

Я создаю PHP REST API, который будет использоваться из клиента JavaScript, и у меня возникли некоторые проблемы с выяснением того, как реализовать стороны аутентификации и доступа. Там будет несколько приложений, которые будут использовать библиотеку JavaScript, которую яБуду развиваться, чтобы общаться и взаимодействовать с моим приложением. Я’Я буду предоставлять ключи API для каждого из них, так чтоне проблема.

Я начинаю путаться, когда пользователи этих сайтов проходят аутентификацию в моем приложении. Кажется плохой идеей, чтобы этот внешний сайт хранил моего пользователя.информация об учетной записи и пароле; Итак, я думаю, что моя библиотека JavaScript должна включать виджет входа в систему, который запрашивает пользователяИнформация об учетной записи для моего приложения.

Если аутентификация там прошла успешно, так как яя работаю с REST API, яВам нужно будет сохранить полученный токен в файле cookie на стороне клиента или в другом месте, чтобы пользователь неНе нужно снова входить в мое приложение на каждой странице внешнего сайта. Однако что произойдет, если пользователь выходит из внешнего сайта, а затем другой пользователь входит в тот же браузер? Что касается моей библиотеки JavaScript, старый пользователь все равно будет входить в мое приложение, потому что cookie / токен еще не истек — как я могу очистить мой cookie, когда предыдущий пользовательсессия заканчивается? Или я полностью сбился с правильного пути?


Так что я’Я думаю, что процесс будет что-то вроде:

ИзвиниНесколько вопросов здесь. Я думаю, что главное, если яСохраняя токен в файле cookie, как я могу убедиться, что он очищен, когда пользователь выходит из внешнего приложения? Или, если я не долженне сохранять его в куки, как мне информировать клиента о пользователе?состояние?

C strcoll()

strcoll()

The strcoll() function compares the string pointed to by str1 with the one pointed to by str2. The comparison is performed in accordance with the locale specified using the setlocale() function.

The strcoll() function returns an integer that is interpreted as indicated here in the following table :

Value Meaning
Less than zero str1 is less than str2
Zero str1 is equal to str2
Greater than zero str1 is greater than str2

strcoll() Syntax

Following is the syntax of the strcoll() function :

strcoll() Example

Following code fragment prints Equal on the screen :

В чем разница между strcmp() и strcoll()?

Я попытался понять их обоих, но я не нашел различий, кроме strcoll() этот ссылка говорит, что он

сравнивает две строки с нулевым завершением в соответствии с текущей локалью, как определено в категории LC_COLLATE.

Во вторых мыслях, и я знаю, что задаю еще один вопрос для подробного ответа, что именно этот язык для C и С++?

strcmp() берет байты строки один за другим и сравнивает их как любые байты.

strcoll() берет байты, преобразует их с помощью языка, затем сравнивает результат. Преобразование переупорядочивает в зависимости от языка. На французском языке акцентированные письма приходят после неосвещенных. Итак é после e. Однако é до f. strcoll() исправляется. strcmp() не так хорошо.

Однако во многих случаях strcmp() достаточно, потому что вам не нужно показывать результат, упорядоченный на используемом языке (локали). Например, если вам просто нужно быстро получить доступ к большому количеству данных, проиндексированных строкой, вы должны использовать карту, проиндексированную этой строкой. Вероятно, бесполезно сортировать те, которые используют strcoll() , который, как правило, очень медленный (по крайней мере, по сравнению с strcmp() ).

Подробнее о персонажах вы также можете ознакомиться на веб-сайте Unicode.

В отношении языка, это язык. По умолчанию установлено значение «C» (более или менее, не локали). После выбора местоположения локаль устанавливается соответствующим образом. Вы также можете установить переменную среды LC_LOCALE. На самом деле таких переменных очень много. Но в целом вы используете предопределенные функции, которые автоматически принимают эти переменные в учетную запись и делают правильную вещь для вас. (например, даты/времени форматирования, номера/измерения формата, вычисления верхнего/нижнего регистра и т.д.)

По какой-то причине во всех локалях юникода, которые я тестировал, в нескольких разных версиях glibc, strcoll() возвращает ноль для любых двух хираганов. Это разбивает sort, uniq и все, что каким-то образом взаимодействует с порядками строк.

$echo -e -n ‘い\n ろ\n は\n に\n ほ\n へ\n と\n’ | сортировать | Uniq

который просто нарушается без ремонта. Люди из разных уголков мира могут иметь разные идеи о том, следует ли «い» размещать до или после «ろ», но никто из них не будет считать их одинаковыми.

И нет, установка вашего языка на японский не имеет значения:

$LC_ALL = ja_JP.utf8 LANG = ja_JP.utf8 LC_COLLATE = ja_JP.utf8 echo -e -n ‘い\n ろ\n は\n に\n ほ\n へ\n と\n’ | сортировать | Uniq

В каком-то официальном списке рассылки была дискуссия, но угадайте, что это было в 2002 году, и это никогда не было исправлено, потому что людям все равно: https://www.mail-archive.com/linux-utf8@nl.linux.org/msg02658.html

Эта ошибка произошла с нами в какой-то день, и в итоге наш единственный выход состоял в том, чтобы установить локаль сортировки на «C» и полагаться на хорошие свойства кодировки utf-8. Это ужасный опыт, так как не нужно работать в локали «C» при обработке все-японских данных.

Итак, ради вашего здравого смысла, НЕ используйте напрямую strcoll. Более безопасным вариантом может быть:

на всякий случай strcoll() решает вкрутить вас.

strcoll()

Синтаксис:

strcall(str1, str2 )

Поддерживается следующими версиями PHP:

Описание функции:

Функция strcall () осуществляет сравнение двух строк с учетом текущей локали.

Возвращает три возможных значения:

число меньше 0 — если str1 меньше чем str2;

число больше 0 — если str1 больше чем str2.


0 — если str1 равно str2.

Для локалей C или POSIX, данная функция не отличается от функции strcmp().

Обязательный аргумент. Первая сравниваемая строка.

Обязательный аргумент. Вторая сравниваемая строка.

string

Функция небезопасна в двоичной форме.

Примеры:

Пример:

В этом примере сравнение одних и тех же слов, но в разных локалях даст разный результат.

setlocale (LC_ALL, ‘en_US’);
echo strcoll(«World!»,»WORLD!»);

setlocale(LC_ALL, ‘Russian_Russia.1251’);
echo strcoll(«World!»,»WORLD!»);
?>

What is the difference between strcmp() and strcoll()?

I tried understanding both of them but I did not find any differences except for strcoll() this reference says that it

compares two null terminated strings according to current locale as defined by the LC_COLLATE category.

On the second thoughts and I know I am asking another question for detailed answer, what exactly is this locale, for both C and C++?

2 Answers 2

strcmp() takes the bytes of the string one by one and compare them as is whatever the bytes are.

strcoll() takes the bytes, transform them using the locale, then compares the result. The transformation re-orders depending on the language. In French, accentuated letters come after the non-accentuated ones. So é is after e. However, é is before f. strcoll() gets it right. strcmp() not so well.

However, in many cases strcmp() is enough because you don’t need to show the result ordered in the language (locale) in use. For example, if you just need to quickly access a large number of data indexed by a string you’d use a map indexed by that string. It probably is totally useless to sort those using strcoll() which is generally very slow (in comparison to strcmp() at least.)

For details about characters you may also want to check out the Unicode website.

В чем разница между STRCMP () и strcoll ()?

Я пытался понять , как из них , но я не нашел каких — либо различий , за исключением strcoll() этой ссылки говорит , что

сравнивает две строки нуля в соответствии с текущей локалью, определенной категорией LC_COLLATE.

На второй мысли, и я знаю, что я задаю другой вопрос для подробного ответа, что именно эта локаль, как для C и C ++?

strcmp() принимает байты строки по одному и сравнить их, как это то, что байты.

strcoll() принимает байт, преобразовывать их , используя региональные настройки, затем сравнивает результат. Трансформация переупорядочивает в зависимости от языка. На французском языке, подчеркнутые письма приходят после того, как не-подчеркнутых из них. Так é после е . Однако, é пред е . strcoll() получает это право. strcmp() Не так хорошо.

Однако, во многих случаях strcmp() достаточно , потому что вам не нужно , чтобы показать результат заказанный на языке (локаль) в использовании. Например, если вам просто нужно быстро получить доступ большого количества данных проиндексированных строки вы используете карту , индексированную эту строкой. Это , вероятно, совершенно бесполезно для сортировки тех , с помощью strcoll() которых , как правило , очень медленно (по сравнению с , по strcmp() крайней мере.)

Для получения дополнительной информации о символах вы также можете проверить Unicode сайт.

Что касается локализации, это язык. По умолчанию установлено значение «C» (более или менее, нет локали). После выбора местоположения локаль устанавливается соответствующим образом. Вы также можете установить переменные окружения LC_LOCALE. Есть на самом деле много таких переменных. Но в целом вы использовать предопределенные функции, которые автоматически принимают эти переменные в счете и делать правильные вещи для вас. (Т.е. дата формата / время, номер формат / меры, вычислить верхний / нижний регистр, и т.д.)

По какой — то причине во всех Юникода локалей я тестировал на нескольких различных версиях glibc, strcoll () возвращает ноль для любых двух hiraganas. Это ломает то , Uniq , и все , что взаимодействует с заказами строк в некотором роде.

$ Эхо -e -n ‘い \ п ろ \ п は \ п に \ п ほ \ п へ \ п と \ п’ | сортировать | уник

который просто сломаны не подлежит ремонту. Люди из разных уголков мира могут иметь разные представления о том «い» должен быть помещен до или после того, как «ろ», но никто в здравом уме будет считать их одинаковыми.

И нет, установка локаль на японский один не имеет значения:

$ LC_ALL = ja_JP.utf8 LANG = ja_JP.utf8 LC_COLLATE = ja_JP.utf8 эхо -e -n ‘い \ п ろ \ п は \ п に \ п ほ \ п へ \ п と \ п’ | сортировать | уник

Был обсужден вопрос в каком — то официальном списке рассылки, но думаю , что это было в 2002 году , и она никогда не была фиксированной , потому что люди не заботятся: https://www.mail-archive.com/linux-utf8@nl.linux.org /msg02658.html

Это ошибка случилось с нами в какой-то день и в конце концов, наш единственный выход был установить СОРТ- локали «C» и полагаться на приятные свойства UTF-8 кодировке. Это ужасный опыт, так как один не должен реально работать в «C» локали при обработке все-японские данные.

Поэтому ради вашего здравомыслия, то просто НЕ непосредственно использовать strcoll. Более безопасный вариант может быть:

только в случае, если strcoll () решает ввернуть Вас .

Илон Маск рекомендует:  Mfc под колпаком или создание mfc приложения без app wizard
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL