컴퓨터/APM

[비공개/보관용] 웹사이트 이전 후에 DB 한글이 깨질 때

하늘치 2016. 5. 13. 08:45
반응형

출처 https://chongmoa.com:45183/sql/514








1.문서저장형식(php) : UTF8
2.MYSQL 테이블형식 : UTF8
3.FLEX : UTF8

1.문서저장형식(php) : ANSI
2.MYSQL : UTF8
3.mysql_query("set names utf8"); 후 INSERT시 한글 안 깨짐.
4.mysql_query("set names utf8"); 이든 euc-kr이든 안하고 넣음 깨짐.

이상적인 형태 :
flex : utf8, 
mysql:utf8, 
php : utf8

현재 쓰고 있는 형태 :
flex : utf8
mysql:utf8
php:ansi

mysql_query("set names euckr");
한글 insert전
iconv('utf-8', 'euc-kr',$str) 해서 저장 하고
빼올 때도 iconv('euc-kr', 'utf-8', $str)로 flex로 던져줌

utf-8 일때 변경 및 새로 해야 할 것.

flex : utf8
mysql : utf8
php : ansi
mysql_query("set names utf8");


utf-8 일때 DB 이전후 깨질때 함수의 경우(sql_query라 할때 상단 부분에 @mysql_query("set names utf8", $connect_db);

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function sql_query($sql, $error='') {
    $connect_db = sql_connect(DB_HOST, DB_USER, DB_PASS) or die('MySQL Connect Error!!!');
    $select_db  = sql_select_db(DB_NAME, $connect_db) or die('MySQL DB Error!!!');
    @mysql_query("set names utf8", $connect_db);
 
    // Blind SQL Injection 취약점 해결
    $sql = trim($sql);
    // union의 사용을 허락하지 않습니다.
    $sql = preg_replace("#^select.*from.*union.*#i", "select 1", $sql);
    // `information_schema` DB로의 접근을 허락하지 않습니다.
    $sql = preg_replace("#^select.*from.*where.*`?information_schema`?.*#i", "select 1", $sql);
 
    //@mysql_query("set names euckr");
    if ($error) :
        $result = @mysql_query($sql, $connect_db) or die("<p>$sql<p>" . mysql_errno() . " : " .  mysql_error() . "<p>error file : {$_SERVER['PHP_SELF']}");
    else :
        $result = @mysql_query($sql, $connect_db);
    endif;
 
    return $result;
}


euc-kr 일때 변경 및 새로 해야 할 것.

flex : euckr
mysql : euckr
php : ansi
mysql_query("set names euckr");


euc-kr 일때 DB 이전후 깨질때 함수의 경우(sql_query라 할때 상단 부분에 @mysql_query("set names euckr", $connect_db);

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function sql_query($sql, $error='') {
    $connect_db = sql_connect(DB_HOST, DB_USER, DB_PASS) or die('MySQL Connect Error!!!');
    $select_db  = sql_select_db(DB_NAME, $connect_db) or die('MySQL DB Error!!!');
    @mysql_query("set names euckr", $connect_db);
 
    // Blind SQL Injection 취약점 해결
    $sql = trim($sql);
    // union의 사용을 허락하지 않습니다.
    $sql = preg_replace("#^select.*from.*union.*#i", "select 1", $sql);
    // `information_schema` DB로의 접근을 허락하지 않습니다.
    $sql = preg_replace("#^select.*from.*where.*`?information_schema`?.*#i", "select 1", $sql);
 
    //@mysql_query("set names euckr");
    if ($error) :
        $result = @mysql_query($sql, $connect_db) or die("<p>$sql<p>" . mysql_errno() . " : " .  mysql_error() . "<p>error file : {$_SERVER['PHP_SELF']}");
    else :
        $result = @mysql_query($sql, $connect_db);
    endif;
 
    return $result;
}


반응형