<?php
function format_month($m, $type = 1) {
$months = [
['', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
['', 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
['', '一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月'],
];
return $months[$type][$m] ?? '';
}
?>
<?php
function filter_utf8_char($ostr) {
// 正則匹配合法字符區塊
preg_match_all('/[\x{FF00}-\x{FFEF}|\x{0000}-\x{00FF}|\x{4E00}-\x{9FFF}]+/u', $ostr, $matches);
$str = implode('', $matches[0]);
if ($str === '') {
// 兜底逐字節處理
$return = '';
$len = strlen($ostr);
for ($i = 0; $i < $len; ) {
$ord = ord($ostr[$i]);
if ($ord >= 224) { $return .= substr($ostr, $i, 3); $i += 3; }
elseif ($ord >= 192) { $return .= substr($ostr, $i, 2); $i += 2; }
elseif ($ord >= 65 && $ord <= 90) { $return .= $ostr[$i]; $i++; }
elseif ($ord >= 128 && $ord <= 191) { $i++; } // 跳過續位元組
else { $return .= $ostr[$i]; $i++; }
}
$str = $return;
preg_match_all('/[\x{FF00}-\x{FFEF}|\x{0000}-\x{00FF}|\x{4E00}-\x{9FFF}]+/u', $str, $matches);
$str = implode('', $matches[0]);
}
return $str;
}
?>
<?php
function binary_to_file($file) {
$content = $GLOBALS['HTTP_RAW_POST_DATA'] ?? file_get_contents('php://input');
// 注意:enctype=multipart/form-data 時不可用
return file_put_contents($file, $content, LOCK_EX);
}
?>
三個函數覆蓋國際化顯示、內容安全過濾、文件上傳接收常見場景。