[PHP] UTF-8 BOM 떼어 내기

PHP 2010. 5. 24. 14:37



DOMDocument를 사용할 경우, BOM이 박혀 있으면 오동작 함.
UTF-8 일 경우 아래처럼 BOM을 막무가내로 잘라내는 로직을 사용...-_-



function stripBOM($sContent)
{
    $aBOM = array(0xEF, 0xBB, 0xBF);

    for ($i=0; $i<3; $i++) {
        if (Ord($sContent[$i])!=$aBOM[$i]) return $sContent;
    }

    return substr($sContent, 3);
}




BOM 배열을 이용하여 여러 인코딩의 BOM을 잘라낼 수도 있겠음.
자동으로 감지해서 잘라준다던지

function stripBOM($sContent, $sEncoding)
{
    $aBOM = array(
        'UTF-8'      => array(0xEF, 0xBB, 0xBF),
        'UTF-16BE' => array(0xFE, 0xFF),
        'UTF-16LE' => array(0xFF, 0xFE),
        'UTF-32BE' => array(0x00, 0x00, 0xFE, 0xFF),
        'UTF-32LE' => array(0xFF, 0xFE, 0x00, 0x00)
    );

    if (array_key_exists($sEncoding, $aBOM)==false) return $sContent;    

    $iCount = count($aBOM[$sEncoding]);
    for ($i=0; $i<$iCount; $i++) {
        if (Ord($sContent[$i])!=$aBOM[$sEncoding][$i]) return $sContent;
    }

    return substr($sContent, count($aBOM[$sEncoding]));   
}






Posted by bloodguy
,