2011-09-21 12 views
1

php에서 문자열의 비 UTF8 문자를 모두 바꿔야합니다. 그러나 iconv의 기능 (예 : //TRANSLIT)이 아닌 일부 선택한 문자 (예 : "_" 또는 "*")가 해당됩니다.비 UTF8 문자 대체

일반적으로 사용자가 잘못된 문자를 발견하여 위치를 볼 수있게하려고합니다.

내가 이렇게 모든 기능을 찾을 수 없습니다, 그래서 내가 사용하는 거라고 : 두 문자열에 DIFF을 //IGNORE

    • 사용 iconv을하고 원하는 문자를 삽입 할 경우 비 -UTF8 ones

    더 좋은 방법은이 문제를 해결하기 위해 결합 할 수있는 PHP의 기능이 있습니까?

    도움 주셔서 감사합니다.

  • 답변

    3

    여기 당신이 원하는 무엇을 당신이 가까운 무언가를 달성하는 데 도움이 개 기능은 다음과 같습니다 '?'는 preg_replace('blablabla', **'?'**, $some_string)에있는 문자열을 변경하는 것입니다 현재 어떤 무엇으로 (대체를 변경할 수 있습니다

    //reject overly long 2 byte sequences, as well as characters above U+10000 and replace with ? 
    $some_string = preg_replace('/[\x00-\x08\x10\x0B\x0C\x0E-\x19\x7F]'. 
    '|[\x00-\x7F][\x80-\xBF]+'. 
    '|([\xC0\xC1]|[\xF0-\xFF])[\x80-\xBF]*'. 
    '|[\xC2-\xDF]((?![\x80-\xBF])|[\x80-\xBF]{2,})'. 
    '|[\xE0-\xEF](([\x80-\xBF](?![\x80-\xBF]))|(?![\x80-\xBF]{2})|[\x80-\xBF]{3,})/S', 
    '?', $some_string); 
    
    //reject overly long 3 byte sequences and UTF-16 surrogates and replace with ? 
    $some_string = preg_replace('/\xE0[\x80-\x9F][\x80-\xBF]'. 
    '|\xED[\xA0-\xBF][\x80-\xBF]/S','?', $some_string); 
    

    노트

    원본 기사 : http://magp.ie/2011/01/06/remove-non-utf8-characters-from-string-with-php/

    +0

    소리가 아주 좋아요. 테스트 해 볼게요. –