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);
}
{
$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]));
}
{
$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]));
}
'PHP' 카테고리의 다른 글
[PHP] 원본 문자열에서 특정 문자열의 위치를 모두 추출하여 반환 (0) | 2010.07.14 |
---|---|
[PHP] SpreadSheet_Excel_Reader 64비트 CPU 오류. (0) | 2010.06.15 |
[PHP] debug_backtrace() - 함수호출 스택 디버깅 (0) | 2010.04.09 |
[PHP] constant() 함수 (0) | 2010.04.08 |
[PHP] 사용자 정의 함수 호출 (call_user_func, call_user_func_array) (0) | 2010.03.30 |