2016-07-17 2 views
1

두 개의 다른 특수 문자를 비교하려하지만 비교할 때 동일합니다.두 개의 다른 특수 문자가 동일합니다.

$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

내가 올바른 비교를 위해 무엇을 할 수 있는가?

감사합니다.

+0

그 특수 문자는 무엇입니까? –

+0

@Anant, 복사하여 붙여 넣습니다. Windows 시작 메뉴 (검색 창), 그것을 읽을 수 있습니다. – Borna

+0

'var_dump ($ char1 == $ char2)'는 두 문자로'FALSE'를 표시합니다. 결과를 확인할 수 있습니까? 어쩌면 당신의 비교를 위해'strcmp'를 시도해 볼 수도 있습니다. 문자열이 같으면 '0'을 반환합니다. – BeetleJuice

답변

2

유효한 비교를하려면 어떻게해야합니까?

솔루션 업데이트

아마도 우리는이 길을 잘못 찾고 있습니다. 이 문제는 PHP와 관련이 없지만 대신 코드 편집기에 관한 것입니다. 아마도 편집자는 입력 할 때 두 문자를 동일하게 등록하므로 PHP는 차이점을 보지 못합니다. 여기에 당신이 할 수있는 것입니다 :

  1. 저장 문자를 인식하는 편집기를 사용하여 자체 파일에 각 문자, 같은 Wordpad
  2. 로드 이제 우리는 '것을 $char=file_get_contents('path/to/char.txt')
  3. 와 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 accepted answer

+0

true : ... ( – Borna

+1

아마도 잘못된 각도에서 보았을 것입니다. 아마도 코드 편집기와 관련이있을 것입니다. 워드 패드와 같은 편집기를 사용하여 각 문자를 텍스트 파일로 저장하면 어떻게 될까요? PHP에서'$ char = file_get_contents ('path/to/file.txt')'문자를 검색 하시겠습니까? – BeetleJuice

+0

나는 아파치 설정 문제가 있다고 생각합니다 ...나는 디폴트 charset을 설정하려고 시도했는데 여전히 다른 파일에서 읽으려고 시도했다./ – Borna

관련 문제