PHP 判断/移除 BOM(UTF-8)
BOM: 萬國碼檔案簽名 BOM (Byte order Mark, U+FEFF)
BOM 的內容可以表示 UNICODE 是哪種編碼, 但是在接收到的檔案, 要拆解後寫入 DB, 看到 BOM 就覺得有點 ooxx.
在 utf8_encode 看到兩段程式可以來測試 寫入/移除 BOM.
將寫入的檔案內容前加 BOM
<?php
function writeUTF8File($filename,$content)
{
$f = fopen($filename, 'w');
fwrite($f, pack("CCC", 0xef,0xbb,0xbf));
fwrite($f,$content);
fclose($f);
}
?>
移除 BOM function
<?php
function removeBOM($str = '')
{
if (substr($str, 0,3) == pack("CCC",0xef,0xbb,0xbf)) {
$str = substr($str, 3);
}
return $str;
}
?>
由此上述 BOM = pack("CCC",0xef,0xbb,0xbf), 所以移除 BOM 的寫法可用上面的 removeBOM function 或 下述其一:
str_replace("\xef\xbb\xbf", '', $bom_content);
preg_replace("/^\xef\xbb\xbf/", '', $bom_content);
另外看到 判斷此字串是不是 UTF-8 的 function:
function isUTF8($string)
{
return (utf8_encode(utf8_decode($string)) == $string);
}
BOM 的內容可以表示 UNICODE 是哪種編碼, 但是在接收到的檔案, 要拆解後寫入 DB, 看到 BOM 就覺得有點 ooxx.
在 utf8_encode 看到兩段程式可以來測試 寫入/移除 BOM.
將寫入的檔案內容前加 BOM
<?php
function writeUTF8File($filename,$content)
{
$f = fopen($filename, 'w');
fwrite($f, pack("CCC", 0xef,0xbb,0xbf));
fwrite($f,$content);
fclose($f);
}
?>
移除 BOM function
<?php
function removeBOM($str = '')
{
if (substr($str, 0,3) == pack("CCC",0xef,0xbb,0xbf)) {
$str = substr($str, 3);
}
return $str;
}
?>
由此上述 BOM = pack("CCC",0xef,0xbb,0xbf), 所以移除 BOM 的寫法可用上面的 removeBOM function 或 下述其一:
str_replace("\xef\xbb\xbf", '', $bom_content);
preg_replace("/^\xef\xbb\xbf/", '', $bom_content);
另外看到 判斷此字串是不是 UTF-8 的 function:
function isUTF8($string)
{
return (utf8_encode(utf8_decode($string)) == $string);
}