2009-06-12 7 views
0

많은 문자열이있는 데이터베이스가 있습니다. 그 중 일부는 올바르게 UTF-8로 인코딩되며 일부는 인코딩되지 않습니다. 따라서 db에서 100 개의 문자열을 선택하는 스크립트를 설정했습니다. 다음 함수는 (그것이 올바른 있는지에 상관없이) 문자열을 UTF-8 또는하지 포함되어 있는지 여부를 결정한다 :PHP : 2 문자열 - 어느 것이 UTF-8이고 어느 것이 맞지 않습니까?

function detectUTF8($text) { 
    return preg_match('%(?: 
     [\xC2-\xDF][\x80-\xBF]    # non-overlong 2-byte 
     |\xE0[\xA0-\xBF][\x80-\xBF]  # excluding overlongs 
     |[\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} # straight 3-byte 
     |\xED[\x80-\x9F][\x80-\xBF]  # excluding surrogates 
     |\xF0[\x90-\xBF][\x80-\xBF]{2}  # planes 1-3 
     |[\xF1-\xF3][\x80-\xBF]{3}   # planes 4-15 
     |\xF4[\x80-\x8F][\x80-\xBF]{2}  # plane 16 
     )+%xs', 
    $text); 
} 

The output of of script is these strings containing UTF-8 and - after a line break - the utf8_decode() string. Since some strings are double encoded, I decode all strings which you can see there.

The result is a list with some entries with 2 strings each: one is correct, the other one is wrong. You can see it here. 그러나 어느 것이 옳은지 어떻게 결정합니까?

도와 주시면 감사하겠습니다. 미리 감사드립니다!

+0

와우! 그것은 어수선하게 보이는 UTF-8 지원입니다. –

+0

좋은 것이 좋지 않다고 생각합니까? 더 나은 코드가 있습니까? http://www.unspecifiederror.net/2008/09/11/detecting-utf8-in-php-without-multibyte/ (miek에 감사드립니다)의 코드가 있습니다. – caw

답변

1

utf8_decode을 사용하고 detectUTF8 함수가 유효한 UTF-8인지 확인하십시오.

+0

고마워요. 그래서 간단하지만 알아 내지 못했습니다! : D 그것은 일하는 것 같지 않습니까? http://bit.ly/wZPZm – caw

2

mb_detect_encoding ($ text, "UTF-8");

당신은 --enable-mbstring와 PHP를 구축하거나 냠/아파트와 PHP-mbstring 패키지를 설치해야 할 수 있습니다,하지만 PHP는 멀티 바이트 문자열 인코딩을 감지 할 수 있습니다.