两个不同的特殊字符相等


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

阿帕奇/2.4.10

PHP/5.6.3

PhpStorm 9.0.2

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

谢谢。

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

更新的解决方案

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

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

原始解决方案

您可以尝试将字符转换为其 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);

现场演示。此解决方案的灵感来自这个公认的答案