Я сталкиваюсь со сторонней конечной точкой API, которая написана в PHP, работающем под PHP 7.3, который сортирует параметры запроса и вычисляет его сигнатуру SHA (кроме самого параметра сигнатуры), которые должны соответствовать один, который я предоставляю в параметрах запроса.
Вот пример кода PHP сортировки:
$sort_case_sensitive = true;
$keys = array_keys($parameters);
$keys_to_sort = array();
foreach ($keys as $key)
{
$keys_to_sort[] = $sort_case_sensitive
? $key
: strtoupper( $key );
}
array_multisort( $keys_to_sort, SORT_STRING, $keys );
Результат этой функции PHP выглядит примерно так:
address_street
address_street2
address_street_name
address_street_number
Однако мой клиент написан на C#, и сортированный вывод (алгоритм по умолчанию) выглядит следующим образом:
address_street
address_street_name
address_street_number
address_street2
Как переопределить алгоритм сортировки PHP в C#? Я не смог найти ссылку на алфавит, который используется PHP для сортировки. Я вижу вызовы zend_binary_strcasecmp_l
для сортировки строк в исходном коде PHP, но не могу найти определение zend_binary_strcasecmp_l
, только заголовки.