src/StringHelper.php
public static function strcmp($str1, $str2, $locale = false)
	{
		if ($locale)
		{
			// Get current locale
			$locale0 = setlocale(LC_COLLATE, 0);

			if (!$locale = setlocale(LC_COLLATE, $locale))
			{
				$locale = $locale0;
			}

			// See if we have successfully set locale to UTF-8
			if (!stristr($locale, 'UTF-8') && stristr($locale, '_') && preg_match('~\.(\d+)$~', $locale, $m))
			{
				$encoding = 'CP' . $m[1];
			}
			elseif (stristr($locale, 'UTF-8') || stristr($locale, 'utf8'))
			{
				$encoding = 'UTF-8';
			}
			else
			{
				$encoding = 'nonrecodable';
			}

			// If we successfully set encoding it to utf-8 or encoding is sth weird don't recode
			if ($encoding == 'UTF-8' || $encoding == 'nonrecodable')
			{
				return strcoll($str1, $str2);
			}

			return strcoll(static::transcode($str1, 'UTF-8', $encoding), static::transcode($str2, 'UTF-8', $encoding));
		}

		return strcmp($str1, $str2);
	}
public static function strcmp($str1, $str2, $locale = false)
	{
		if ($locale)
		{
			// Get current locale
			$locale0 = setlocale(LC_COLLATE, 0);

			if (!$locale = setlocale(LC_COLLATE, $locale))
			{
				$locale = $locale0;
			}

			// See if we have successfully set locale to UTF-8
			if (!stristr($locale, 'UTF-8') && stristr($locale, '_') && preg_match('~\.(\d+)$~', $locale, $m))
			{
				$encoding = 'CP' . $m[1];
			}
			elseif (stristr($locale, 'UTF-8') || stristr($locale, 'utf8'))
			{
				$encoding = 'UTF-8';
			}
			else
			{
				$encoding = 'nonrecodable';
			}

			// If we successfully set encoding it to utf-8 or encoding is sth weird don't recode
			if ($encoding == 'UTF-8' || $encoding == 'nonrecodable')
			{
				return strcoll($str1, $str2);
			}

			return strcoll(static::transcode($str1, 'UTF-8', $encoding), static::transcode($str2, 'UTF-8', $encoding));
		}

		return strcmp($str1, $str2);
	}
public static function strcmp ( $ str1 , $ str2 , $ locale = false ) { if ( $ locale ) { // Get current locale $ locale0 = setlocale ( LC_COLLATE , 0 ) ; if ( ! $ locale = setlocale ( LC_COLLATE , $ locale ) ) { $ locale = $ locale0 ; } // See if we have successfully set locale to UTF-8 if ( ! stristr ( $ locale , 'UTF-8' ) && stristr ( $ locale , '_' ) && preg_match ( '~\.(\d+)$~' , $ locale , $ m ) ) { $ encoding = 'CP' . $ m [ 1 ] ; } elseif ( stristr ( $ locale , 'UTF-8' ) || stristr ( $ locale , 'utf8' ) ) { $ encoding = 'UTF-8' ; } else { $ encoding = 'nonrecodable' ; } // If we successfully set encoding it to utf-8 or encoding is sth weird don't recode if ( $ encoding == 'UTF-8' || $ encoding == 'nonrecodable' ) { return strcoll ( $ str1 , $ str2 ) ; } return strcoll ( static :: transcode ( $ str1 , 'UTF-8' , $ encoding ) , static :: transcode ( $ str2 , 'UTF-8' , $ encoding ) ) ; } return strcmp ( $ str1 , $ str2 ) ; }
UTF-8/LOCALE aware alternative to strcmp()

A case sensitive string comparison.

@param   string  $str1    string 1 to compare
@param   string  $str2    string 2 to compare
@param   mixed   $locale  The locale used by strcoll or false to use classical comparison

@return  integer  < 0 if str1 is less than str2; > 0 if str1 is greater than str2, and 0 if they are equal.

@link    https://www.php.net/strcmp
@link    https://www.php.net/strcoll
@link    https://www.php.net/setlocale
@since   1.3.0
UTF - 8 / LOCALE aware alternative to strcmp ()