code: 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);
  	}
docs: 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