两个不同的特殊字符相等
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 看不出有任何区别。您可以执行以下操作:
- 使用可识别字符的编辑器将每个字符单独保存在文件中,例如
Wordpad
- 用
$char=file_get_contents('path/to/char.txt')
加载PHP中的字符
- 既然我们已经完全绕过了您的代码编辑器,请比较两者。如果它们不同,您的编辑可能是罪魁祸首。
原解
您可以尝试将您的字符转换为它们的 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
我正在尝试比较 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 看不出有任何区别。您可以执行以下操作:
- 使用可识别字符的编辑器将每个字符单独保存在文件中,例如
Wordpad
- 用
$char=file_get_contents('path/to/char.txt')
加载PHP中的字符
- 既然我们已经完全绕过了您的代码编辑器,请比较两者。如果它们不同,您的编辑可能是罪魁祸首。
原解
您可以尝试将您的字符转换为它们的 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