인터넷정보

str_replace() 한글치환시 한글깨짐 현상 보강...??

알 수 없는 사용자 2008. 5. 30. 16:09

<?php
 $str = '오예동물 잘되는지..';
 echo str_replace( '예' ,'yes', $str );
/*
 출력 -> "오yes탙es?잘되는지.."
 기대한 결과는 '오yes동물 잘되는지..' 이지만,
 연속된 한글코드 '오예동물  잘되는지..' 단어속에는 '예' 가 두번 찾아지게 된다.

 이것은 2바이트 체계의 한글을 무시해서 생기는 일이며,
 '동'의 뒷자리 1바이트와 '물'의 앞자리 1바이트가 합쳐져 '예'라는 단어와
  같은코드로 해석되어 생기는 일이다.
*/

// -------------------------------------------------------------------
 function Han_replace( $search, $to, $str ) {

    // 한글만 단어별로 늘리서,, 앞뒤의 코드가 섞이는것을 방지함.

    $ESC = "\x1b"; // 키보드로 입력할 수 없는 [Esc]코드,

    $pattern1 = "/([\x80-\xff].)/";
    $pattern2 = "/([\x80-\xff].)$ESC/";

    $str = preg_replace( $pattern1, "\\1$ESC", $str ); // 모든 한글단어 뒤에 $ESC를 추가함.
    $search = preg_replace( $pattern1, "\\1$ESC", $search ); // 찾을 문자도 같은 패턴으로 바꿈,
    $str = str_replace( $search, $to, $str ); // 일단 때려 바꾸고.

    return preg_replace( $pattern2, "\\1", $str ); // 한글 뒤에 추가했던 $ESC를 지움.
 }
 $str = '오예동물 잘되는지..';
 echo Han_replace( '예' ,'yes', $str );
 //  출력 -> 오yes동물 잘되는지..
?>

utf-8 지원하지 않는 쪽에서,
단어필터링을 위해 만들었던 함수입니다.

방법이 좀 무식한것 같기도 하구...
그냥 이렇게도 하는구나.. 하구 양해를 ㅎㅎ;


출처:http://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=tipntech&wr_id=61182&page=1

반응형