菜单–修改–页面属性 或者ctrl+j打开页面属性窗口,点选“标题/编码”去掉“包括Unicode签名Bom”前的勾
有Bom的文件太多?这样太麻烦?当然有更好的方法!方法三:用php文件批量去除bom头 将以下这段代码保存为php文件,上传到服务器,用浏览器访问它!<?phpif (isset($_GET['dir'])){ //设置文件目录
$basedir=$_GET['dir']}else{$basedir = '.'}$auto = 1checkdir($basedir)
function checkdir($basedir){
if ($dh = opendir($basedir)) {
while (($file = readdir($dh)) !== false) {
if ($file != '.' &&$file != '..'){
if (!is_dir($basedir./.$file)) {
echo filename: $basedir/$file .checkBOM($basedir/$file). }else{$dirname = $basedir./.$file
checkdir($dirname)}}}closedir($dh)}}function checkBOM ($filename) {
global $auto
$contents = file_get_contents($filename)
$charset[1] = substr($contents, 0, 1)
$charset[2] = substr($contents, 1, 1)
$charset[3] = substr($contents, 2, 1)
if (ord($charset[1]) == 239 &&ord($charset[2]) == 187 &&ord($charset[3]) == 191) {
if ($auto == 1) {
$rest = substr($contents, 3)
rewrite ($filename, $rest)
return (<font color=redBOM found, automatically removed.</font)} else {return (<font color=redBOM found.</font)}}else return (BOM Not Found.)}function rewrite ($filename, $data) {
$filenum = fopen($filename, w)
flock($filenum, LOCK_EX)
fclose($filenum)}?还用记事本保存?那你真是智商捉急了!
1.类似WINDOWS自带的记事本等软件,在保存一个以UTF-8编码的文件时,会在文件开始的地方插入三个不可见的字符(0xEF 0xBB0xBF,即BOM)。它是一串隐藏的字符,用于让记事本等编辑器识别这个文件是否以UTF-8编码。对于一般的文件,这样并不会产生什么麻烦。但对于
PHP来说,BOM是个大麻烦。
2.PHP并不会忽略BOM,所以在读取、包含或者引用这些文件时,会把BOM作为该文件开头正文的一部分。根据嵌入式语言的特点,这串字符将被直接执行
(显示)出来。由此造成即使页面的 top padding 设置为0,也无法让整个网页紧贴浏览器顶部,因为在html一开头有这3个字符呢!
3.最大的麻烦还不是这个。受COOKIE送出机制的限制,在这些文件开头已经有BOM的文件中,COOKIE无法送出(因为在COOKIE送出前PHP已经送出了文件头),所以登入和登出功能失效。一切依赖COOKIE、SESSION实现的功能全部无效。
<?php
/*检测并清除BOM*/
if(isset($_GET['dir'])){
$basedir=$_GET['dir']
}else{
$basedir = '.'
}
$auto = 1
checkdir($basedir)
function checkdir($basedir){
if($dh = opendir($basedir)){
while(($file = readdir($dh)) !== false){
if($file != '.' &&$file != '..'){
if(!is_dir($basedir."/".$file)){
echo "filename: $basedir/$file ".checkBOM("$basedir/$file")." "
}else{
$dirname = $basedir."/".$file
checkdir($dirname)
}
}
}//end while
closedir($dh)
}//end if($dh
}//end function
function checkBOM($filename){
global $auto
$contents = file_get_contents($filename)
$charset[1] = substr($contents, 0, 1)
$charset[2] = substr($contents, 1, 1)
$charset[3] = substr($contents, 2, 1)
if(ord($charset[1]) == 239 &&ord($charset[2]) == 187 &&ord($charset[3]) == 191){
if($auto == 1){
$rest = substr($contents, 3)
rewrite ($filename, $rest)
return "<font color=red>BOM found, automatically removed.</font>"
}else{
return ("<font color=red>BOM found.</font>")
}
}
else return ("BOM Not Found.")
}//end function
function rewrite($filename, $data){
$filenum = fopen($filename, "w")
flock($filenum, LOCK_EX)
fwrite($filenum, $data)
fclose($filenum)
}//end function
?>
下面这个可以将bom头过滤byte[] allbytes = line.getBytes("UTF-8")
for (int i=0i <allbytes.lengthi++)
{
int tmp = allbytes[i]
String hexString = Integer.toHexString(tmp)
// 1个byte变成16进制的,只需要2位就可以表示了,取后面两位,去掉前面的符号填充
hexString = hexString.substring(hexString.length() -2)
System.out.print(hexString.toUpperCase())
System.out.print(" ")
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)