两个不同的特殊字符相等

Two different special characters are equal

我正在尝试比较 2 个不同的特殊字符,但是当我比较它们时它们是相等的。

$char1= "";
$char2= "";

echo mb_detect_encoding($char1, 'UTF-8', true); // 'UTF-8'
echo mb_detect_encoding($char2, 'UTF-8', true); // 'UTF-8'

if($char1 == $char2) // TRUE
echo strcmp($char1, $char2); // 0

Apache/2.4.10

PHP/5.6.3

PhpStorm 9.0.2

我该怎么做才能进行有效比较?

谢谢。

What can I do to make a valid comparison?

更新解决方案

也许我们看错了。该问题可能与 PHP 无关,而是与您的代码编辑器有关。也许编辑器在您输入时将两个字符注册为相同的字符,因此 PHP 看不出有任何区别。您可以执行以下操作:

  1. 使用可识别字符的编辑器将每个字符单独保存在文件中,例如 Wordpad
  2. $char=file_get_contents('path/to/char.txt')
  3. 加载PHP中的字符
  4. 既然我们已经完全绕过了您的代码编辑器,请比较两者。如果它们不同,您的编辑可能是罪魁祸首。

原解

您可以尝试将您的字符转换为它们的 ASCII 值并比较值而不是字符

$ordUTF8 = function($char){
    list(, $ord) = unpack('N', mb_convert_encoding($char, 'UCS-4BE', 'UTF-8'));
    return $ord;
};
$char1= "";
$char2= "";
// 61656 and 61558 in my testing
$isEqual = $ordUTF8($char1)===$ordUTF8($char2);

Live demo. This solution was inspired by this accepted answer