2012-02-18 3 views
2

UTF8 파일을 읽고 파일에서 읽은 데이터를 배열에 저장하고 있습니다. 그러나 mysql 쿼리에서 해당 데이터를 사용할 때 문제가 발생합니다. int 값 (..)을 사용하기 전에 모든 int 값을 명시 적으로 변환한다고 생각했습니다. 그러나 intval (utf8string)은 제로를주고 있습니다. 코드에 따라PHP utf8 intval

예기치 않은 출력을 제공 :

//..... 
var_dump($data[10]); 
echo '|' . $data[10] . "|\n"; 
echo '|' . bin2hex($data[10]) . "|\n"; 
echo '|' . utf8_decode($data[10]) . "|\n"; 
echo '|' . intval(utf8_decode($data[10])) . "|\n"; 
echo '|' . intval($data[10]). "|\n"; exit 
//..... 

출력 : 어떻게 이러한 데이터로부터 정확한 INTVAL를 얻을 수

string(15) "2240000" 
|2240000| 
|003200320034003000300030003000| 
|2240000| 
|0| 
|0| 

어떤 생각?

+0

합니다. 예제에'var_dump ($ data [10]);'의 결과를 추가 할 수 있습니까? –

+1

'bin2hex ($ data [10])'을 보여주십시오. UTF-8로 인코딩 된 숫자는 ASCII와 동일하므로 아무런 문제가 없어야합니다. – deceze

+0

위의 두 함수의 출력을 추가했습니다. – workwise

답변

1

문자열이 UTF-16 (UTF-8이 아닌)으로 인코딩 된 것 같습니다.

어느 쪽이든 당신은에서 데이터를 얻을, 또는 인코딩 변환 위치에 대한 어떤 변경 : 나는 당신이보고있는 결과를 얻을 것 이해가 안 돼요

$data[10] = iconv('UTF-16', 'UTF-8', $data[10]) 
+0

여기에 나는주의 사항이 있습니다 : PHP Notice : iconv() : 입력 문자열에 불완전한 멀티 바이트 문자가 감지되었습니다 .... 그리고 문자열이 손상됩니다. – workwise

+0

@user 말미에'NUL' 바이트가 있고 문자열이 UTF-16 문자열에 필요한 BOM으로 시작하지 않습니다. 이 문자열은 어디에서 왔으며이 배열로 어떻게 가져 옵니까? – deceze