2011-08-15 5 views
10

메신저로 가져 오는 지저분한 데이터에 대해 데이터 정리를하고 있습니다.'u00e9'을 (를) utf8 char, mysql 또는 php로 변환하는 방법?

이 데이터는 실제로 문자열에 포함된다 '의사'유니 코드 문자를 포함 'u00e9'등

그래서 하나 개의 필드는 다음과 같을 수 있습니다 .. 'Jalostotitlu00e1n' 내가 서투른 'u00e1n 것을 버리고 필요 '로 바꾸고 해당 UTF 문자로 바꿉니다.

하위 문자열과 CHR을 사용하는 mysql에서이 작업을 수행 할 수 있지만 PHP를 통해 데이터를 preprocssing하기 때문에 거기에서도 할 수 있습니다.

이미 utf 데이터로 작업하기 위해 mysql과 php를 구성하는 방법에 대해 모두 알고 있습니다. 문제는 가져 오기중인 소스 데이터에만 있습니다.

감사합니다.

+2

ANSI로 UTF-8 문자 "로 표시됩니다. 아마도 "해당 코드 포인트로 Unicode 문자의 UTF-8 인코딩"을 의미했을 것입니다. –

+0

@Ignacio 사실,하지만 "UTF-8 문자"를 "유니 코드 문자를 인코딩하는 1, 2, 3 또는 4 바이트 시퀀스"로 정의합니다. 그것이 유효한 정의일까요? – deceze

+1

@deceze : 기술적으로 이것은 "UTF-8 시퀀스"라고합니다. –

답변

10

방법이 있습니다. 모든 uXXXX을 HTML로 바꾸고 html_entity_decode()

.e.e. echo html_entity_decode("Jalostotitlán");

u1234 형태의 모든 UTF 문자는 ሴ으로 HTML로 인쇄 할 수 있습니다. 하지만 UTF 시퀀스의 시작을 식별하는 다른 문자가 없으면 많은 오탐이있을 수 있으므로 대체를 수행하는 것은 상당히 어렵습니다. 간단한 정규식

preg_replace('/u([\da-fA-F]{4})/', '&#x\1;', $str)

+0

감사합니다. 내가 생각하지 못했던 멋진 간단한 솔루션입니다. 나는 이것을 고치는 것이 안전 할 것이라고 생각한다. 왜냐하면 내가 고치려고하는 데이터가 그것에 수치를 가져서는 안되기 때문이다. 그들이하는 유일한 이유는 혼란스러운 UTF 때문입니다. 따라서 식별하기 쉽습니다. – carpii

+1

조심하세요! 데이터가 실제로 제한되어 있지 않는 한 안정적인 방식으로 데이터를 복구 할 수 없습니다. u-hex-hex-hex 시퀀스를 맹 글링 된 유니 코드 이스케이프로 사용하면 "persuaded"라는 단어를 "pers 귭"로 바꿀 수 있습니다 ... – bobince

+0

@bobince correct, 그것이 내가 쓴 이유입니다. "가양 성". 식별자가 중요합니다. – rabudde

2

내 트위터 타임 라인 스크립트 그래서 백 슬래시를 제거하고 자신의 preg_replace이다 @rubbude 사용 u00e9 \에 é와 같은 특수 문자를 반환 할 수 있습니다.

// Fix uxxxx charcoding to html 
$str  = str_replace('\u','u',$json); 
$strJSON = preg_replace('/u([\da-fA-F]{4})/', '&#x\1;', $str); 

그것은 나를 위해 workes 그것은집니다 : De #Haarstichting is h\u00e9t medium voor alles 속으로 : 변환 UTF8의 HTML에 대한 De #Haarstichting is hét medium voor alles

+2

no! '\ u'에서 백 슬래시를 제거하지 마십시오. 왜냐하면 식별자로 사용될 수 있기 때문입니다. 수정 된 정규 표현식'preg_replace ('/ \\ u ([\ da-fA-F] {4}) /', '&#x\1;', $ str)'대신 – rabudde

+0

을 사용하십시오. Offcourse 나의 스트립 핑은 틀렸어. 고맙습니다. @rabbude 오늘 밤에 테스트 중이며 preg_replace로이 답변을 업데이트 할 것입니다. – Theo

+1

오른쪽 @rabbude, 이제 왜 내가 \\ u 자신을 사용하지 않았는지 기억한다 : '경고 : preg_replace() [function.preg-replace] : 컴파일 실패 : PCRE는 \ L, \ l, \ N을 지원하지 않는다. {이름}, \ U 또는 \ u 오프셋 1에서 ' – Theo

10

/* 기능 PHP는 그런 없습니다 */

public static function Utf8_ansi($valor='') { 

    $utf8_ansi2 = array(
    "\u00c0" =>"À", 
    "\u00c1" =>"Á", 
    "\u00c2" =>"Â", 
    "\u00c3" =>"Ã", 
    "\u00c4" =>"Ä", 
    "\u00c5" =>"Å", 
    "\u00c6" =>"Æ", 
    "\u00c7" =>"Ç", 
    "\u00c8" =>"È", 
    "\u00c9" =>"É", 
    "\u00ca" =>"Ê", 
    "\u00cb" =>"Ë", 
    "\u00cc" =>"Ì", 
    "\u00cd" =>"Í", 
    "\u00ce" =>"Î", 
    "\u00cf" =>"Ï", 
    "\u00d1" =>"Ñ", 
    "\u00d2" =>"Ò", 
    "\u00d3" =>"Ó", 
    "\u00d4" =>"Ô", 
    "\u00d5" =>"Õ", 
    "\u00d6" =>"Ö", 
    "\u00d8" =>"Ø", 
    "\u00d9" =>"Ù", 
    "\u00da" =>"Ú", 
    "\u00db" =>"Û", 
    "\u00dc" =>"Ü", 
    "\u00dd" =>"Ý", 
    "\u00df" =>"ß", 
    "\u00e0" =>"à", 
    "\u00e1" =>"á", 
    "\u00e2" =>"â", 
    "\u00e3" =>"ã", 
    "\u00e4" =>"ä", 
    "\u00e5" =>"å", 
    "\u00e6" =>"æ", 
    "\u00e7" =>"ç", 
    "\u00e8" =>"è", 
    "\u00e9" =>"é", 
    "\u00ea" =>"ê", 
    "\u00eb" =>"ë", 
    "\u00ec" =>"ì", 
    "\u00ed" =>"í", 
    "\u00ee" =>"î", 
    "\u00ef" =>"ï", 
    "\u00f0" =>"ð", 
    "\u00f1" =>"ñ", 
    "\u00f2" =>"ò", 
    "\u00f3" =>"ó", 
    "\u00f4" =>"ô", 
    "\u00f5" =>"õ", 
    "\u00f6" =>"ö", 
    "\u00f8" =>"ø", 
    "\u00f9" =>"ù", 
    "\u00fa" =>"ú", 
    "\u00fb" =>"û", 
    "\u00fc" =>"ü", 
    "\u00fd" =>"ý", 
    "\u00ff" =>"ÿ"); 

    return strtr($valor, $utf8_ansi2);  

} 
+1

유용한 기능. 내 문제가 해결되었습니다. – pollux1er

관련 문제