이번에 소개할 함수는 serialize , unserialize PHP 기본 함수를 base64로 인코딩과 디코딩하여 처리해주는 함수이다. 그렇다면 왜 base64 로 인코딩 및 디코딩을 해주는지 궁금할 수 있다.
그이유는 바로 DB저장에 있으며 DB저장시 따움표 처리때문에 데이터가 손상될 우려가 있기때문에 그렇다면 MYSQL 이스케이프 처리하면 되지 않느냐? 할 수 있지만 이것도 잘사용해야하는게 기본적으로 serialize 함수처리 시 알다시피 데이터 정보를 같이 저장하는데 값의 길이도 함께 저장이 되기 때문에 어느순간 데이터가 잘못 이스케이프 되서 손상될 수 있는 위험이 있다.
따라서 이스케이프 하지 않고 base64 로 변환후 저장하면 데이터 손상되는것을 막을 수 있다.
하단은 base64로 쉽게 인코딩 및 디코딩 할 수 있도록 도와주는 함수이다.
base64_serialize() - serialize 화 데이터를 base64 로 인코딩 |
// serialize aftrer base64 encode
if( !function_exists('base64_serialize')){
function base64_serialize($arr = array())
{
if( count($arr) < 1){ return ''; }
$data = serialize($arr);
$serialize = base64_encode($data);
return $serialize;
}
}
base64_unserialize : serialize base64 데이터를 디코딩 |
// base64 decode aftrer serialize
if( !function_exists('base64_unserialize')){
function base64_unserialize($data)
{
if( $data == '') return array();
if( base64_encode(base64_decode($data)) == $data){
$data = base64_decode($data);
$unserialize = unserialize($data);
if( $unserialize === false){ return array(); }
else{ return $unserialize; }
}else{
$unserialize = unserialize($data);
if( $unserialize === false){ return array(); }
else{ return $unserialize; }
}
}
}